from .enums import BalloonSystemType, TrackingType, PayloadOperation
from dataclasses import dataclass


@dataclass
class BalloonSimulation:
    """
    A data class that encapsulates all the parameters necessary for simulating a high-altitude balloon system.

    Attributes:
    -----------
    min_altitude: float
        The minimum altitude reached by the balloon during the simulation, in meters.
    max_altitude: float
        The maximum altitude reached by the balloon during the simulation, in meters.
    payload_accessories_mass: float
        The mass of payload and all accessories, in kilograms.
    balloon_type: BalloonSystemType
        The type of balloon system being simulated.
    balloon_1_diameter: float
        The diameter of the primary balloon, in meters.
    balloon_1_envelope_mass: float
        The mass of the primary balloon's envelope, in kilograms.
    balloon_1_gas_mass: float
        The mass of the gas contained within the primary balloon, in kilograms.
    balloon_2_diameter: float
        The diameter of the secondary balloon, in meters.
    balloon_2_envelope_mass: float
        The mass of the secondary balloon's envelope, in kilograms.
    balloon_2_gas_mass: float
        The mass of the gas contained within the secondary balloon, in kilograms.
    solar_panel_surface: float
        The total surface area of the solar panels, in square meters.
    solar_panel_efficiency: float
        The efficiency of the solar panels as a percentage.
    solar_panel_tracking: TrackingType
        The tracking mechanism used for the solar panels.
    battery_capacity: float
        The total energy capacity of the battery system, in watt-hours.
    battery_max_SOD: float
        The maximum state of discharge allowable for the battery, as a percentage.
    payload_operation: PayloadOperation
        The operational mode of the payload.
    payload_power: float
        The power consumption of the payload, in watts.
    """

    min_altitude: float
    max_altitude: float
    payload_accessories_mass: float
    balloon_type: BalloonSystemType
    balloon_1_diameter: float
    balloon_1_envelope_mass: float
    balloon_1_gas_mass: float
    balloon_2_diameter: float
    balloon_2_envelope_mass: float
    balloon_2_gas_mass: float
    solar_panel_surface: float
    solar_panel_efficiency: float
    solar_panel_tracking: TrackingType
    battery_capacity: float
    battery_max_SOD: float
    payload_operation: PayloadOperation
    payload_power: float
