# -*- coding: utf-8 -*-

from loguru import logger

from app.models.domain.devices import ACVTSFSwitchSetRequest
from app.controllers.equipment.switch import Switch, fetch_data, send_switch_command
from app.schemas.equipment import VentilationFan


class VentilationFanSwitch(Switch):

    def __init__(self, equipment: VentilationFan):
        super(VentilationFanSwitch, self).__init__(equipment)


@logger.catch()
async def ventilation_fan_switch_control(project_id: str, equipment_id: str) -> None:
    equip_params, day_type = await fetch_data(project_id, equipment_id)
    is_workday = True if day_type.get('day_type') == 'WeekDay' else False
    action = await VentilationFanSwitch(VentilationFan(**equip_params)).build_next_action(is_workday)
    if not is_workday:
        action = 'off'
    logger.debug(f'VTSF-{equipment_id}: {action}')
    await send_switch_command(project_id, equipment_id, action)


@logger.catch()
async def build_acvtsf_switch_set(params: ACVTSFSwitchSetRequest) -> str:
    vrf = VentilationFan(
        running_status=params.running_status,
        in_cloud_status=params.in_cloud_status,
        on_time=params.on_time,
        off_time=params.off_time,
    )
    action = await VentilationFanSwitch(vrf).build_next_action(params.is_workday)
    if not params.is_workday:
        action = 'off'

    return action