from celery.schedules import crontab
from celery.task import periodic_task

from financial.data_api import get_nobitex_usdt_irl_rate, get_currencyapi_euro_usdt_rate
from financial.models import ExchangeRate
from futplus.celery_conf import app
from utils import deep_get


@app.on_after_finalize.connect
def finance_periodic_tasks(sender, **kwargs):
    print('finance periodic_tasks started')
    # sender.add_periodic_task(60 * 30, kill_chromes.s(), name='kill chromes')
    # sender.add_periodic_task(60 * 60 * 2, update_supervisor.s(), name='update supervisor')


@periodic_task(run_every=crontab(hour="23", minute='0'))
def get_exchange_rate_every_day():
    result = get_nobitex_usdt_irl_rate()
    usdt_rls = deep_get(result, 'stats.usdt-rls', None)
    if usdt_rls:
        created = ExchangeRate.objects.create(
            name='usdt-rls',
            best_buy=usdt_rls.get('bestBuy'),
            best_sell=usdt_rls.get('bestSell'),
            day_change=usdt_rls.get('dayChange'),
            day_close=usdt_rls.get('dayClose'),
            day_high=usdt_rls.get('dayHigh'),
            day_low=usdt_rls.get('dayLow'),
            day_open=usdt_rls.get('dayOpen'),
            is_closed=usdt_rls.get('isClosed'),
            latest=usdt_rls.get('latest'),
            mark=usdt_rls.get('mark'),
        )
        return created
    else:
        return 'no data found'


@periodic_task(run_every=crontab(hour="11", minute='0'))
def get_euro_to_usdt_every_day():
    result = get_currencyapi_euro_usdt_rate()
    euro_usdt = deep_get(result, 'USDT.value')
    if euro_usdt:
        created = ExchangeRate.objects.create(
            name='euro-usdt',
            is_closed=False,
            latest=euro_usdt,
        )
        return created
    else:
        return 'no data found'
