from __future__ import annotations
from typing import Protocol, runtime_checkable
from zempy.zosapi.systemdata.protocols.i_fields import IFields
from zempy.zosapi.systemdata.protocols.i_wavelengths import IWavelengths
from zempy.zosapi.systemdata.protocols.isd_title_notes import ISDTitleNotes

# -------------------------
# Protocols (minimal stubs)
# -------------------------

@runtime_checkable
class ISDApertureData(Protocol): ...


@runtime_checkable
class ISDEnvironmentData(Protocol): ...
@runtime_checkable
class ISDPolarizationData(Protocol): ...
@runtime_checkable
class ISDAdvancedData(Protocol): ...
@runtime_checkable
class ISDRayAimingData(Protocol): ...
@runtime_checkable
class ISDMaterialCatalogData(Protocol): ...

@runtime_checkable
class ISDFiles(Protocol): ...
@runtime_checkable
class ISDUnitsData(Protocol): ...
@runtime_checkable
class ISDNonSeqData(Protocol): ...
@runtime_checkable
class ISDNamedFilters(Protocol): ...


@runtime_checkable
class ISystemData(Protocol):
    """Interfaces and methods for changing all System Explorer data.
       Accessible via IOpticalSystem.SystemData.
    """
    @property
    def Aperture(self) -> ISDApertureData: ...
    @property
    def Wavelengths(self) -> IWavelengths: ...
    @property
    def Fields(self) -> IFields: ...
    @property
    def Environment(self) -> ISDEnvironmentData: ...
    @property
    def Polarization(self) -> ISDPolarizationData: ...
    @property
    def Advanced(self) -> ISDAdvancedData: ...
    @property
    def RayAiming(self) -> ISDRayAimingData: ...
    @property
    def MaterialCatalogs(self) -> ISDMaterialCatalogData: ...
    @property
    def TitleNotes(self) -> ISDTitleNotes: ...
    @property
    def Files(self) -> ISDFiles: ...
    @property
    def Units(self) -> ISDUnitsData: ...
    @property
    def NonSequentialData(self) -> ISDNonSeqData: ...
    @property
    def NamedFiltersData(self) -> ISDNamedFilters: ...

