from py_jftech import read, write, where, format_date

__COLUMNS__ = {
    'aev_id': 'id',
    'aev_date': 'date',
    'aev_asset_id': 'asset_id',
    'aev_value': 'value',
}


@write
def insert(asset_id, date, value):
    return f'''
    insert into asset_ewma_value(aev_date, aev_asset_id, aev_value)
    values ('{format_date(date)}', {asset_id}, {value})
    '''


@write
def delete(day=None):
    if day:
        return f"delete from asset_ewma_value where aev_date >= '{format_date(day)}'"
    else:
        return 'truncate table asset_ewma_value'


@read(one=True)
def get_last_one(asset_id, max_date=None):
    sqls = []
    if max_date:
        sqls.append(f"aev_date <= '{format_date(max_date)}'")
    return f'''
    select {','.join([f"{x[0]} as {x[1]}" for x in __COLUMNS__.items()])} from asset_ewma_value 
    {where(*sqls, aev_asset_id=asset_id)} order by aev_date desc limit 1
    '''


@read
def get_list(asset_id, min_date=None, max_date=None):
    sqls = []
    if min_date:
        sqls.append(f"aev_date >= '{format_date(min_date)}'")
    if max_date:
        sqls.append(f"aev_date <= '{format_date(max_date)}'")
    return f'''select {','.join([f"{x[0]} as {x[1]}" for x in __COLUMNS__.items()])} from asset_ewma_value {where(*sqls, aev_asset_id=asset_id)}'''


@read
def get_last(asset_id, max_date=None, limit=1):
    sqls = []
    if max_date:
        sqls.append(f"aev_date <= '{format_date(max_date)}'")
    return f'''
    select {','.join([f"{x[0]} as {x[1]}" for x in __COLUMNS__.items()])} from asset_ewma_value 
    {where(*sqls, aev_asset_id=asset_id)} order by aev_date desc limit {limit}
    '''