from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import TCS_BOARD_ASS_ID
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
from tmtccmd.config.tmtc import (
    tmtc_definitions_provider,
    TmtcDefinitionWrapper,
    OpCodeEntry,
)
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_mode import Mode


class InfoAssy:
    TCS_BOARD_ASS_NORMAL = "Switching TCS board assembly on"
    TCS_BOARD_ASS_OFF = "Switching TCS board assembly off"


class OpCodeAssy:
    TCS_BOARD_ASS_NORMAL = ["nml"]
    TCS_BOARD_ASS_OFF = ["off"]


@tmtc_definitions_provider
def add_tcs_assy_cmds(defs: TmtcDefinitionWrapper):
    oce = OpCodeEntry()
    oce.add(
        keys=OpCodeAssy.TCS_BOARD_ASS_NORMAL,
        info=InfoAssy.TCS_BOARD_ASS_NORMAL,
    )
    oce.add(
        keys=OpCodeAssy.TCS_BOARD_ASS_OFF,
        info=InfoAssy.TCS_BOARD_ASS_OFF,
    )
    defs.add_service(
        name=CustomServiceList.TCS_ASS.value,
        info="TCS Board Assembly",
        op_code_entry=oce,
    )


def pack_tcs_ass_cmds(q: DefaultPusQueueHelper, op_code: str):
    if op_code in OpCodeAssy.TCS_BOARD_ASS_NORMAL:
        pack_mode_cmd_with_info(
            object_id=TCS_BOARD_ASS_ID,
            mode=Mode.NORMAL,
            submode=0,
            q=q,
            info=InfoAssy.TCS_BOARD_ASS_NORMAL,
        )
    if op_code in OpCodeAssy.TCS_BOARD_ASS_OFF:
        pack_mode_cmd_with_info(
            object_id=TCS_BOARD_ASS_ID,
            mode=Mode.OFF,
            submode=0,
            q=q,
            info=InfoAssy.TCS_BOARD_ASS_OFF,
        )