from framework import read, where, format_date, to_tuple

__COLUMNS__ = {
    'rfn_fund_id': 'fund_id',
    'rfn_date': 'nav_date',
    'rfn_nav_cal': 'nav_cal',
}


@read
def get_navs(fund_id=None, min_date=None, max_date=None):
    sqls = []
    if min_date:
        sqls.append(f"rfn_date >= '{format_date(min_date)}'")
    if max_date:
        sqls.append(f"rfn_date <= '{format_date(max_date)}'")
    return f'''
    select {','.join([f"`{x[0]}` as `{x[1]}`" for x in __COLUMNS__.items()])} from robo_fund_navs 
    {where(*sqls, rfn_fund_id=to_tuple(fund_id))} order by rfn_fund_id, rfn_date
    '''


@read
def get_min_dates(fund_ids=None):
    return f'''
    select rfn_fund_id as fund_id, min(rfn_date) as min_date from robo_fund_navs {where(rfn_fund_id=to_tuple(fund_ids))}
    group by rfn_fund_id
    '''