from __future__ import annotations
from typing import Protocol, runtime_checkable

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

    # ---- Integer identifiers ----
    @property
    def RayIndex(self) -> int: ...
    @property
    def Segment(self) -> int: ...
    @property
    def Parent(self) -> int: ...
    @property
    def Level(self) -> int: ...
    @property
    def In_object(self) -> int: ...
    @property
    def Hit_object(self) -> int: ...
    @property
    def Hit_face(self) -> int: ...
    @property
    def Vignetted(self) -> int: ...
    @property
    def Error(self) -> int: ...

    # ---- Spatial coordinates ----
    @property
    def X(self) -> float: ...
    @property
    def Y(self) -> float: ...
    @property
    def Z(self) -> float: ...

    # ---- Direction cosines ----
    @property
    def L(self) -> float: ...
    @property
    def M(self) -> float: ...
    @property
    def N(self) -> float: ...

    # ---- Surface normal vector components ----
    @property
    def Nx(self) -> float: ...
    @property
    def Ny(self) -> float: ...
    @property
    def Nz(self) -> float: ...

    # ---- Electric field components ----
    @property
    def Ex(self) -> float: ...
    @property
    def Ey(self) -> float: ...
    @property
    def Ez(self) -> float: ...

    # ---- Path / wavelength info ----
    @property
    def PathLength(self) -> float: ...
    @property
    def OpticalPathLength(self) -> float: ...
    @property
    def Wavelength(self) -> float: ...
