from tmtccmd.tc.definitions import TcQueueT
from tmtccmd.config import QueueCommands

from .common import command_mode
import config.object_ids as obj_ids

from pus_tc.prompt_parameters import prompt_parameters


class OpCodes:
    THERMAL_CONTROLLER = [obj_ids.THERMAL_CONTROLLER_ID.hex(), "thermal_controller"]
    CORE_CONTROLLER = [obj_ids.CORE_CONTROLLER_ID.hex(), "core_controller"]


class Info:
    THERMAL_CONTROLLER = "Thermal controller"
    CORE_CONTROLLER = "ACS controller"


def pack_controller_commands(tc_queue: TcQueueT, op_code: str):
    parameters = prompt_parameters(
        [
            {"name": "Mode", "defaultValue": "2"},
            {"name": "Submode", "defaultValue": "0"},
        ]
    )
    mode = int(parameters["Mode"])
    if mode < 0 or mode > 2:
        print("Invalid Mode, defaulting to OFF")
        mode = 0
    submode = int(parameters["Submode"])
    command_mode(
        object_id=get_object_from_op_code(op_code),
        mode=mode,
        submode=submode,
        tc_queue=tc_queue,
        info=op_code + " to " + str(mode) + "," + str(submode),
    )

    tc_queue.appendleft((QueueCommands.WAIT, 20))

    command_mode(
        object_id=get_object_from_op_code(op_code),
        mode=0,
        submode=0,
        tc_queue=tc_queue,
        info=op_code + " to 0,0",
    )


def get_object_from_op_code(op_code: str):
    try:
        return bytes.fromhex(op_code)
    except:
        pass

    if op_code in OpCodes.THERMAL_CONTROLLER:
        return obj_ids.THERMAL_CONTROLLER_ID
    if op_code in OpCodes.CORE_CONTROLLER:
        return obj_ids.CORE_CONTROLLER_ID