# iar_critical_ray_info_protocol.py
from __future__ import annotations
from typing import Protocol, runtime_checkable

from zempy.zosapi.tools.enums.critical_ray_type import CriticalRayType


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

    # ---- Identifiers / classification ----
    @property
    def FieldPoint(self) -> int: ...
    @property
    def RayType(self) -> CriticalRayType: ...
    @property
    def Pass_(self) -> bool: ...
    @property
    def TerminationObject(self) -> int: ...

    # ---- Physical parameters ----
    @property
    def Wavelength(self) -> float: ...

    # ---- Input vector ----
    @property
    def XIn(self) -> float: ...
    @property
    def YIn(self) -> float: ...
    @property
    def ZIn(self) -> float: ...
    @property
    def LIn(self) -> float: ...
    @property
    def MIn(self) -> float: ...
    @property
    def NIn(self) -> float: ...

    # ---- Target vector ----
    @property
    def XTarget(self) -> float: ...
    @property
    def YTarget(self) -> float: ...
    @property
    def ZTarget(self) -> float: ...
    @property
    def LTarget(self) -> float: ...
    @property
    def MTarget(self) -> float: ...
    @property
    def NTarget(self) -> float: ...

    # ---- Actual (measured) vector ----
    @property
    def XActual(self) -> float: ...
    @property
    def YActual(self) -> float: ...
    @property
    def ZActual(self) -> float: ...
    @property
    def LActual(self) -> float: ...
    @property
    def MActual(self) -> float: ...
    @property
    def NActual(self) -> float: ...
