import json

from api import DatumType, Datum, PortfoliosRisk
from basic.dao import robo_base_datum as rbd
from framework import component, parse_date


@component
class DefaultDatum(Datum):

    def get_fund_datums(self, crncy=None, risk=None, fund_ids=None):
        result = rbd.get_base_datums(type=DatumType.FUND, crncy=crncy, risk=risk, datum_ids=fund_ids)
        result = [{**json.loads(x['datas']), 'id': x['id']} for x in result]
        return [{**x, 'inceptDate': parse_date(x['inceptDate'])} for x in result]

    def get_index_datums(self, ticker=None, index_ids=None):
        result = rbd.get_base_datums(type=DatumType.INDEX, ticker=ticker, datum_ids=index_ids)
        return [{**json.loads(x['datas']), 'id': x['id']} for x in result]

    def get_high_risk_datums(self, risk: PortfoliosRisk):
        risk3 = self.get_fund_datums(risk=3)
        if risk is PortfoliosRisk.FT3:
            return risk3
        risk3 = [x for x in risk3 if x['assetType'] in ['STOCK', 'BALANCED', 'COMMODITY']]
        if risk is PortfoliosRisk.FT6:
            return risk3 + self.get_fund_datums(risk=4)
        if risk is PortfoliosRisk.FT9:
            return risk3 + self.get_fund_datums(risk=(4, 5))
        return None