from py_jftech import read, write, where, format_date, mapper_columns

from api import PortfoliosRisk

__COLUMNS__ = {
    'rwd_id': 'id',
    'rwd_date': 'date',
    'rwd_risk': 'risk',
    'rwd_weight': 'weight',
    'rwd_drift': 'drift',
}


@read(one=True)
def get_one(day, risk: PortfoliosRisk):
    return f"select {','.join([f'{x[0]} as {x[1]}' for x in __COLUMNS__.items()])} from robo_weight_drift {where(rwd_date=day, rwd_risk=risk)}"


@read(one=True)
def get_last_one(max_date, risk: PortfoliosRisk):
    return f'''
    select {','.join([f'{x[0]} as {x[1]}' for x in __COLUMNS__.items()])} from robo_weight_drift 
    {where(f"rwd_date <= '{format_date(max_date)}'", rwd_risk=risk)} order by rwd_date desc limit 1
    '''


@write
def insert(datas):
    datas = mapper_columns(datas=datas, columns=__COLUMNS__)
    return f'''
    insert into robo_weight_drift({','.join([x for x in datas.keys()])})
    values ({','.join([f"'{x[1]}'" for x in datas.items()])})
    '''


@write
def lock():
    return "lock tables robo_weight_drift read"


@write
def unlock():
    return "UNLOCK TABLES"