"""
User defined code can be added here.
"""
from typing import Union, Tuple
from tmtc_core.tc.obsw_pus_tc_base import PusTcInfo
from enum import Enum


# Yeah, I did not have a better idea yet..
class Developer(Enum):
    Robin = 0


Developer = Developer.Robin


def command_preparation_hook() -> Tuple[bytearray, Union[None, PusTcInfo]]:
    """
    Can be used to pack user-defined commands.
    """
    if Developer == Developer.Robin:
        return prepare_robins_commands()


def global_setup_hook():
    """
    Can be used to alter the global variables in a custom defined way.
    For example, device specific com ports or ethernet ports can be set here.
    The global variables in the config.obsw_config file can be edited here
    by using the handle.
    For example: config.obsw_config.G_SEND_ADDRESS = new_send_address
    """
    if Developer == Developer.Robin:
        global_setup_hook_robin()


def prepare_robins_commands():
    from tmtc_core.tc.obsw_pus_tc_base import PusTelecommand
    command = PusTelecommand(service=17, subservice=1, ssc=20)
    return command.pack_command_tuple()


def global_setup_hook_robin():
    import config.obsw_config
    # Static IP of board.
    port_send = 7301
    destination_address = ('', port_send)

    # Socket will be bound to this address.
    port_receive = 7302
    recv_address_to_set = ('', port_receive)
    config.obsw_config.G_REC_ADDRESS = recv_address_to_set
    config.obsw_config.G_SEND_ADDRESS = destination_address