import json

from py_jftech import read, write, where, format_date

from api import AssetPoolType

__COLUMNS__ = {
    'rap_id': 'id',
    'rap_date': 'date',
    'rap_type': 'type',
    'rap_asset_ids': 'asset_ids',
}


@read
def get_list(max_date=None, min_date=None, type: AssetPoolType = None):
    sqls = []
    if max_date:
        sqls.append(f"rap_date <= '{format_date(max_date)}'")
    if min_date:
        sqls.append(f"rap_date >= '{format_date(min_date)}'")
    return f'''
    select {','.join([f"`{x[0]}` as `{x[1]}`" for x in __COLUMNS__.items()])} from robo_assets_pool
    {where(*sqls, rap_type=type)} order by rap_type, rap_date
    '''


@read(one=True)
def get_one(day, type: AssetPoolType):
    return f'''select {','.join([f"`{x[0]}` as `{x[1]}`" for x in __COLUMNS__.items()])} from robo_assets_pool {where(rap_date=day, rap_type=type)}'''


@read(one=True)
def get_last_one(type: AssetPoolType = None, day=None):
    sql = f"rap_date <= '{format_date(day)}'" if day else None
    return f'''select {','.join([f"`{x[0]}` as `{x[1]}`" for x in __COLUMNS__.items()])} from robo_assets_pool {where(sql, rap_type=type)} order by rap_date desc limit 1'''


@write
def insert(day, type: AssetPoolType, pool: list):
    return f'''
        insert into robo_assets_pool(rap_date, rap_type, rap_asset_ids)
        values ('{format_date(day)}', {type.value},'{json.dumps(pool)}')
    '''


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