from __future__ import annotations
from typing import Protocol, runtime_checkable


@runtime_checkable
class IAR_SpotDataResultMatrix(Protocol):
    """Protocol matching ZOSAPI.Analysis.Data.IAR_SpotDataResultMatrix."""

    # ---- Methods ----
    def Get_X_For(self, fieldN: int, waveN: int) -> float: ...
    def Get_Y_For(self, fieldN: int, waveN: int) -> float: ...
    def Get_Z_For(self, fieldN: int, waveN: int) -> float: ...
    def Get_L_For(self, fieldN: int, waveN: int) -> float: ...
    def Get_M_For(self, fieldN: int, waveN: int) -> float: ...
    def Get_N_For(self, fieldN: int, waveN: int) -> float: ...

    def GetDetector_X_For(self, fieldN: int, waveN: int) -> float: ...
    def GetDetector_Y_For(self, fieldN: int, waveN: int) -> float: ...
    def GetDetector_Z_For(self, fieldN: int, waveN: int) -> float: ...

    def GetGeoSpotSizeFor(self, fieldN: int, waveN: int) -> float: ...
    def GetRMSSpotSizeFor(self, fieldN: int, waveN: int) -> float: ...
    def GetRMSSpot_X_For(self, fieldN: int, waveN: int) -> float: ...
    def GetRMSSpot_Y_For(self, fieldN: int, waveN: int) -> float: ...

    def GetReferenceCoordinate_X_For(self, fieldN: int, waveN: int) -> float: ...
    def GetReferenceCoordinate_Y_For(self, fieldN: int, waveN: int) -> float: ...

    # ---- Properties ----
    @property
    def HalfWidth_X(self) -> float: ...
    @property
    def HalfWidth_Y(self) -> float: ...
    @property
    def MaxRadius(self) -> float: ...
    @property
    def MeanRadius(self) -> float: ...
    @property
    def NumberOfFields(self) -> int: ...
    @property
    def NumberOfWavelengths(self) -> int: ...
