from finesse.model import Node
from finesse.components.general import borrows_nodes
from finesse.components.readout import ReadoutRF
from finesse.detectors.general import MaskedDetector
from finesse.parameter import float_parameter


@borrows_nodes()
@float_parameter("f", "Frequency")
@float_parameter("phase", "Phase")
class MaskedReadoutRF(ReadoutRF, MaskedDetector):
    def __init__(
        self,
        name: str,
        optical_node: Node,
        *,
        f: float = 0.0,
        phase: float = 0.0,
        output_detectors: bool = False,
        pdtype: None | str | dict[str, str] = None,
    ):
        super().__init__(
            name,
            optical_node,
            f=f,
            phase=phase,
            output_detectors=output_detectors,
            pdtype=pdtype,
        )
        MaskedDetector.__init__(self, name)

    @property
    def has_mask(self) -> int:
        return len(self.mask)