from enum import Enum


class LiconicType(Enum):
  STX44_IC = "STX44_IC"  # incubator
  STX44_HC = "STX44_HC"  # humid cooler
  STX44_DC2 = "STX44_DC2"  # dry storage
  STX44_HR = "STX44_HR"  # humid wide range
  STX44_DR2 = "STX44_DR2"  # dry wide range
  STX44_AR = "STX44_AR"  # humidity controlled
  STX44_DF = "STX44_DF"  # deep freezer
  STX44_NC = "STX44_NC"  # no climate
  STX44_DH = "STX44_DH"  # dry humid

  STX110_IC = "STX110_IC"  # incubator
  STX110_HC = "STX110_HC"  # humid cooler
  STX110_DC2 = "STX110_DC2"  # dry storage
  STX110_HR = "STX110_HR"  # humid wide range
  STX110_DR2 = "STX110_DR2"  # dry wide range
  STX110_AR = "STX110_AR"  # humidity controlled
  STX110_DF = "STX110_DF"  # deep freezer
  STX110_NC = "STX110_NC"  # no climate
  STX110_DH = "STX110_DH"  # dry humid

  STX220_IC = "STX220_IC"  # incubator
  STX220_HC = "STX220_HC"  # humid cooler
  STX220_DC2 = "STX220_DC2"  # dry storage
  STX220_HR = "STX220_HR"  # humid wide range
  STX220_DR2 = "STX220_DR2"  # dry wide range
  STX220_AR = "STX220_AR"  # humidity controlled
  STX220_DF = "STX220_DF"  # deep freezer
  STX220_NC = "STX220_NC"  # no climate
  STX220_DH = "STX220_DH"  # dry humid

  STX280_IC = "STX280_IC"  # incubator
  STX280_HC = "STX280_HC"  # humid cooler
  STX280_DC2 = "STX280_DC2"  # dry storage
  STX280_HR = "STX280_HR"  # humid wide range
  STX280_DR2 = "STX280_DR2"  # dry wide range
  STX280_AR = "STX280_AR"  # humidity controlled
  STX280_DF = "STX280_DF"  # deep freezer
  STX280_NC = "STX280_NC"  # no climate
  STX280_DH = "STX280_DH"  # dry humid

  STX500_IC = "STX500_IC"  # incubator
  STX500_HC = "STX500_HC"  # humid cooler
  STX500_DC2 = "STX500_DC2"  # dry storage
  STX500_HR = "STX500_HR"  # humid wide range
  STX500_DR2 = "STX500_DR2"  # dry wide range
  STX500_AR = "STX500_AR"  # humidity controlled
  STX500_DF = "STX500_DF"  # deep freezer
  STX500_NC = "STX500_NC"  # no climate
  STX500_DH = "STX500_DH"  # dry humid

  STX1000_IC = "STX1000_IC"  # incubator
  STX1000_HC = "STX1000_HC"  # humid cooler
  STX1000_DC2 = "STX1000_DC2"  # dry storage
  STX1000_HR = "STX1000_HR"  # humid wide range
  STX1000_DR2 = "STX1000_DR2"  # dry wide range
  STX1000_AR = "STX1000_AR"  # humidity controlled
  STX1000_DF = "STX1000_DF"  # deep freezer
  STX1000_NC = "STX1000_NC"  # no climate
  STX1000_DH = "STX1000_DH"  # dry humid


class ControllerError(Enum):
  RELAY_ERROR = "E0"
  COMMAND_ERROR = "E1"
  PROGRAM_ERROR = "E2"
  HARDWARE_ERROR = "E3"
  WRITE_PROTECTED_ERROR = "E4"
  BASE_UNIT_ERROR = "E5"


class HandlingError(Enum):
  GENERAL_HANDLING_ERROR = "00001"
  GATE_OPEN_ERROR = "00007"
  GATE_CLOSE_ERROR = "00008"
  GENERAL_LIFT_POSITIONING_ERROR = "00009"
  USER_ACCESS_ERROR = "00010"
  STACKER_SLOT_ERROR = "00011"
  REMOTE_ACCESS_LEVEL_ERROR = "00012"
  PLATE_TRANSFER_DETECTION_ERROR = "00013"
  LIFT_INITIALIZATION_ERROR = "00014"
  PLATE_ON_SHOVEL_DETECTION = "00015"
  NO_PLATE_ON_SHOVEL_DETECTION = "00016"
  NO_RECOVERY = "00017"

  IMPORT_PLATE_STACKER_POSITIONING_ERROR = "00100"
  IMPORT_PLATE_HANDLER_TRANSFER_TURN_OUT_ERROR = "00101"
  IMPORT_PLATE_SHOVEL_TRANSFER_OUTER_ERROR = "00102"
  IMPORT_PLATE_LIFT_TRANSFER_ERROR = "00103"
  IMPORT_PLATE_SHOVEL_TRANSFER_INNER_ERROR = "00104"
  IMPORT_PLATE_HANDLER_TRANSFER_TURN_IN_ERROR = "00105"
  IMPORT_PLATE_LIFT_STACKER_TRAVEL_ERROR = "00106"
  IMPORT_PLATE_SHOVEL_STACKER_FRONT_ERROR = "00107"
  IMPORT_PLATE_LIFT_STACKER_PLACE_ERROR = "00108"
  IMPORT_PLATE_SHOVEL_STACKER_INNER_ERROR = "00109"
  IMPORT_PLATE_LIFT_TRAVEL_BACK_ERROR = "00110"
  IMPORT_PLATE_LIFT_INIT_ERROR = "00111"

  EXPORT_PLATE_LIFT_STACKER_TRAVEL_ERROR = "00200"
  EXPORT_PLATE_SHOVEL_STACKER_FRONT_ERROR = "00201"
  EXPORT_PLATE_LIFT_STACKER_IMPORT_ERROR = "00202"
  EXPORT_PLATE_SHOVEL_STACKER_INNER_ERROR = "00203"
  EXPORT_PLATE_LIFT_TRANSFER_POSITIONING_ERROR = "00204"
  EXPORT_PLATE_HANDLER_TRANSFER_TURN_OUT_ERROR = "00205"
  EXPORT_PLATE_SHOVEL_TRANSFER_OUTER_ERROR = "00206"
  EXPORT_PLATE_LIFT_TRANSFER_PLACE_ERROR = "00207"
  EXPORT_PLATE_SHOVEL_TRANSFER_INNER_ERROR = "00208"
  EXPORT_PLATE_HANDLER_TRANSFER_TURN_IN_ERROR = "00209"
  EXPORT_PLATE_LIFT_TRAVEL_BACK_ERROR = "00210"
  EXPORT_PLATE_LIFT_INITIALIZING_ERROR = "00211"

  PLATE_REMOVE_GENERAL_HANDLING_ERROR = "00301"
  PLATE_REMOVE_GATE_OPEN_ERROR = "00307"
  PLATE_REMOVE_GATE_CLOSE_ERROR = "00308"
  PLATE_REMOVE_GENERAL_LIFT_POSITIONING_ERROR = "00309"
  PLATE_REMOVE_USER_ACCESS_ERROR = "00310"
  PLATE_REMOVE_STACKER_SLOT_ERROR = "00311"
  PLATE_REMOVE_REMOTE_ACCESS_LEVEL_ERROR = "00312"
  PLATE_REMOVE_PLATE_TRANSFER_DETECTION_ERROR = "00313"
  PLATE_REMOVE_LIFT_INITIALIZATION_ERROR = "00314"
  PLATE_REMOVE_PLATE_ON_SHOVEL_DETECTION = "00315"
  PLATE_REMOVE_NO_PLATE_ON_SHOVEL_DETECTION = "00316"
  PLATE_REMOVE_NO_RECOVERY = "00317"

  BARCODE_READ_GENERAL_HANDLING_ERROR = "00401"
  BARCODE_READ_GATE_OPEN_ERROR = "00407"
  BARCODE_READ_GATE_CLOSE_ERROR = "00408"
  BARCODE_READ_GENERAL_LIFT_POSITIONING_ERROR = "00409"
  BARCODE_READ_USER_ACCESS_ERROR = "00410"
  BARCODE_READ_STACKER_SLOT_ERROR = "00411"
  BARCODE_READ_REMOTE_ACCESS_LEVEL_ERROR = "00412"
  BARCODE_READ_PLATE_TRANSFER_DETECTION_ERROR = "00413"
  BARCODE_READ_LIFT_INITIALIZATION_ERROR = "00414"
  BARCODE_READ_PLATE_ON_SHOVEL_DETECTION = "00415"
  BARCODE_READ_NO_PLATE_ON_SHOVEL_DETECTION = "00416"
  BARCODE_READ_NO_RECOVERY = "00417"

  PLATE_PLACE_GENERAL_HANDLING_ERROR = "00501"
  PLATE_PLACE_GATE_OPEN_ERROR = "00507"
  PLATE_PLACE_GATE_CLOSE_ERROR = "00508"
  PLATE_PLACE_GENERAL_LIFT_POSITIONING_ERROR = "00509"
  PLATE_PLACE_USER_ACCESS_ERROR = "00510"
  PLATE_PLACE_STACKER_SLOT_ERROR = "00511"
  PLATE_PLACE_REMOTE_ACCESS_LEVEL_ERROR = "00512"
  PLATE_PLACE_PLATE_TRANSFER_DETECTION_ERROR = "00513"
  PLATE_PLACE_LIFT_INITIALIZATION_ERROR = "00514"
  PLATE_PLACE_PLATE_ON_SHOVEL_DETECTION = "00515"
  PLATE_PLACE_NO_PLATE_ON_SHOVEL_DETECTION = "00516"
  PLATE_PLACE_NO_RECOVERY = "00517"

  PLATE_SET_GENERAL_HANDLING_ERROR = "00601"
  PLATE_SET_GATE_OPEN_ERROR = "00607"
  PLATE_SET_GATE_CLOSE_ERROR = "00608"
  PLATE_SET_GENERAL_LIFT_POSITIONING_ERROR = "00609"
  PLATE_SET_USER_ACCESS_ERROR = "00610"
  PLATE_SET_STACKER_SLOT_ERROR = "00611"
  PLATE_SET_REMOTE_ACCESS_LEVEL_ERROR = "00612"
  PLATE_SET_PLATE_TRANSFER_DETECTION_ERROR = "00613"
  PLATE_SET_LIFT_INITIALIZATION_ERROR = "00614"
  PLATE_SET_PLATE_ON_SHOVEL_DETECTION = "00615"
  PLATE_SET_NO_PLATE_ON_SHOVEL_DETECTION = "00616"
  PLATE_SET_NO_RECOVERY = "00617"

  PLATE_GET_GENERAL_HANDLING_ERROR = "00701"
  PLATE_GET_GATE_OPEN_ERROR = "00707"
  PLATE_GET_GATE_CLOSE_ERROR = "00708"
  PLATE_GET_GENERAL_LIFT_POSITIONING_ERROR = "00709"
  PLATE_GET_USER_ACCESS_ERROR = "00710"
  PLATE_GET_STACKER_SLOT_ERROR = "00711"
  PLATE_GET_REMOTE_ACCESS_LEVEL_ERROR = "00712"
  PLATE_GET_PLATE_TRANSFER_DETECTION_ERROR = "00713"
  PLATE_GET_LIFT_INITIALIZATION_ERROR = "00714"
  PLATE_GET_PLATE_ON_SHOVEL_DETECTION = "00715"
  PLATE_GET_NO_PLATE_ON_SHOVEL_DETECTION = "00716"
  PLATE_GET_NO_RECOVERY = "00717"
