from dataclasses import dataclass, field

from .common import BaseMeasurement

@dataclass(frozen=True)
class CompactLogixState(BaseMeasurement):
  ejector_move_down: int
  ejector_move_up: int
  carriage_move_out: int
  carriage_move_in: int
  side_clamps_open: int
  side_clamps_close: int
  table_move_down: int
  table_move_up: int
  gassing_platemove_out: int
  gassing_plate_move_in: int
  cope_eject_plate_move_out: int
  cope_eject_plate_move_in: int
  top_part_move_up: int
  top_part_move_down: int
  front_door_open: int
  front_door_close: int
  pneumatic_loose_part_1_move_out: int
  pneumatic_loose_part_1_move_in: int
  hydraulic_loose_part_2_move_out: int
  hydraulic_loose_part_2_move_in: int
  hydraulic_loose_part_3_move_out: int
  hydraulic_loose_part_3_move_in: int
  clamping_device_side_clamp_left_clamp: int
  clamping_device_side_clamp_left_loose: int
  clamping_device_side_clamp_right_clamp: int
  clamping_device_side_clamp_right_loose: int
  clamping_device_shoot_plate_clamp: int
  clamping_device_shoot_plate_loose: int
  sand_refill: int
  sand_gate_close: int
  sand_gate_open: int
  shoot: int
  clamping_device_gassing_plate_clamp: int
  central_amine_supply_refill: int
  gassing: int
  gas_generator_process_coldbox_betaset: int
  mixer_lid_move_up: int
  mixer_lid_move_down: int
  mixer_wing_motor_on: int
  mixer_move_up: int
  mixer_move_down: int
  sand_dosing_unit_inlet: int
  sand_dosing_unit_outlet: int
  binder_1_sucking: int
  binder_1_blowing: int
  binder_2_suction: int
  binder_2_blowing: int
  binder_3_sucking: int
  binder_3_blowing: int
  binder_4_sucking: int
  binder_4_blowing: int
  additive_1_dosing: int
  additive_2_dosing: int
  mixer_bowl_direction_eject_1_machine: int
  mixer_bowl_direction_eject_2_scrap: int
  cleaning_cylinder_move_up: int
  cleaning_cylinder_move_down: int
  mixer_sand_slide_move_to_machine: int
  mixer_sand_slide_move_to_scrap: int
  vertical_mixersand_slide_gateclose: int
  vertical_mixer_sand_slide_gate_open: int
  sand_sender: int

  series: str = field(default="plant")

@dataclass(frozen=True)
class S7State(BaseMeasurement):
  cpu_running: bool
  
  unterteil_faehrt_aus: bool
  unterteil_faehrt_ein: bool
  auswerfer_1_heben: bool
  auswerfer_1_senken: bool
  auswerfer_2_heben: bool
  auswerfer_2_senken: bool
  abdruecker_seitenteil_links_einfahren: bool
  abdruecker_seitenteil_links_ausfahren: bool

  abdruecker_seitenteil_rechts_einfahren: bool
  abdruecker_seitenteil_rechts_ausfahren: bool
  rolltor_schliessen: bool
  rolltor_oeffnen: bool
  gaswagen_ausfahren: bool
  gaswagen_einfahren: bool
  schwenkplatte_abklappen: bool
  schwenkplatte_einklappen: bool

  losteil_1_unterteil_einfahren: bool
  losteil_1_unterteil_ausfahren: bool
  losteil_2_einfahren: bool
  losteil_2_ausfahren: bool
  losteil_3_einfahren: bool
  losteil_3_ausfahren: bool
  losteil_4_einfahren: bool
  losteil_4_ausfahren: bool

  losteil_5_einfahren: bool
  losteil_5_ausfahren: bool
  seitenteil_links_schliessen: bool
  seitenteil_rechts_schliessen: bool
  seitenteil_links_und_rechts_oeffnen: bool
  sandschleuse_schliessen: bool
  sandschleuse_oeffnen: bool
  sandmessung_3_wege_ventil_schliessen: bool
  
  sandmessung_3_wege_ventil_oeffnen: bool
  schuss: bool
  hubtisch_senken: bool
  hubtisch_heben: bool
  oberteil_heben: bool
  oberteil_senken: bool

  series: str = field(default="plant", init=False)
