import logging
import unittest

from py_jftech import autowired, parse_date, to_str

from api import PortfoliosBuilder, PortfoliosType, PortfoliosRisk, PortfoliosHolder, RoboReportor


class PortfoliosTest(unittest.TestCase):
    logger = logging.getLogger(__name__)

    @autowired(names={'builder': 'poem'})
    def test_poem_build_portfolio(self, builder: PortfoliosBuilder = None):
        result, detail = builder.build_portfolio(parse_date('2008-01-21'), PortfoliosType.NORMAL)
        self.logger.info("portfolios: ")
        for risk, portfolio in result.items():
            self.logger.info(risk.name)
            self.logger.info(portfolio)
            self.logger.info(detail[risk])

    @autowired(names={'builder': 'poem'})
    def test_poem_get_portfolio(self, builder: PortfoliosBuilder = None):
        portfolio = builder.get_portfolios(parse_date('2022-11-07'), PortfoliosRisk.FT9)
        self.logger.info(portfolio)

    @autowired(names={'hold': 'next-re'})
    def test_has_hold(self, hold: PortfoliosHolder = None):
        self.logger.info(hold.has_hold(PortfoliosRisk.FT3))

    @autowired(names={'hold': 'next-re'})
    def test_build_hold(self, hold: PortfoliosHolder = None):
        hold.build_hold_portfolio(parse_date('2022-11-01'), PortfoliosRisk.FT9)

    @autowired(names={'reportor': 'hold-report'})
    def test_hold_report(self, reportor: RoboReportor = None):
        report = reportor.load_report()
        self.logger.info(to_str(report))


if __name__ == '__main__':
    unittest.main()