@startuml
package ska_oso_pdm.entities.csp{
       package common {
            class CommonConfiguration {
                subarray_id: int
                band_5_tuning: List[float]
            }
       }

       package cbf {
            class CBFConfiguration {
                fsp_configs: List[FSPConfiguration]
                vlbi_config: VLBIConfiguration
            }

            class FSPConfiguration {
                fsp_id : int
                function_mode : FSPFunctionMode
                frequency_slice_id : int
                integration_factor : int
                zoom_factor : int
                channel_averaging_map : List[Tuple]
                output_link_map : List[Tuple]
                channel_offset : int
                zoom_window_tuning : int
            }

            enum FSPFunctionMode {
                CORR
                PSS_BF
                PST_BF
                VLBI
            }

            class VLBIConfiguration {

            }

           CBFConfiguration *-- "0..*" FSPConfiguration
           CBFConfiguration *-- VLBIConfiguration
       }

       package lowcbf {
            class LowCBFConfiguration {
                stations: StationConfiguration
                vis: VisConfiguration
            }

            class StationConfiguration {
                stns: List[List[int]]
            }

            class VisConfiguration {
                fsp: VisFSPConfiguration
                stn_beams: List[StationBeamConfiguration]
            }

            class VisFSPConfiguration {
                function_mode: str
                fsp_ids: List[int]
            }

            class StationBeamHost {
                sdp_channel: int
                ip_addr: str
            }

            class StationBeamPort {
                sdp_channel: int
                udp_port: int
                stride: int
            }

            class StationBeamMAC {
                sdp_channel: int
                server_mac: str
            }

            class StationBeamConfiguration {
                stn_beam_id: int
                freq_ids: int
                host: List[StationBeamHost]
                port: List[StationBeamPort]
                mac: List[StationBeamMAC]
                integration_ms: int
            }

           LowCBFConfiguration *-- VisConfiguration
           LowCBFConfiguration *-- StationConfiguration
           VisConfiguration *-- VisFSPConfiguration
           VisConfiguration *-- "0..*" StationBeamConfiguration
           StationBeamConfiguration *-- "0..*" StationBeamHost
           StationBeamConfiguration *-- "0..*" StationBeamPort
           StationBeamConfiguration *-- "0..*" StationBeamMAC
       }

       package pss {
            class PSSConfiguration {

            }
       }

       package pst {
            class PSTConfiguration {

            }
       }

       package subarray {
            class SubarrayConfiguration {
                subarray_name: str
            }
       }

       package csp_configuration {
            class CSPConfigurationID
            class CSPConfiguration {
                config_id: CSPConfigurationID
                subarray_config: SubarrayConfiguration
                common_config: CommonConfiguration
                cbf_config: CBFConfiguration
                lowcbf_config: LowCBFConfiguration
                pst_config: PSTConfiguration
                pss_config: PSSConfiguration
            }
       }
       CSPConfiguration *-- CommonConfiguration
       CSPConfiguration *-- SubarrayConfiguration
       CSPConfiguration *-- CBFConfiguration
       CSPConfiguration *-- LowCBFConfiguration
       CSPConfiguration *-- PSTConfiguration
       CSPConfiguration *-- PSSConfiguration
    }

@enduml
