# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""On-off bin stats computations."""

__all__ = ["Stats"]


class Stats:
    """Container for an on-off observation.

    Parameters
    ----------
    n_on : array_like
        Observed number of counts in the on region
    n_off : array_like
        Observed number of counts in the off region
    a_on : array_like
        Relative background exposure of the on region
    a_off : array_like
        Relative background exposure in the off region
    """

    # TODO: use numpy arrays and properties
    # TODO: add gamma exposure

    def __init__(self, n_on, n_off, a_on, a_off):
        self.n_on = n_on
        self.n_off = n_off
        self.a_on = a_on
        self.a_off = a_off

    @property
    def alpha(self):
        r"""Background exposure ratio (float).

        .. math:: \alpha = a_\mathrm{on} / a_\mathrm{off}
        """
        return self.a_on / self.a_off

    @property
    def background(self):
        r"""Background estimate (float).

        .. math:: \mu_\mathrm{bg} = \alpha\ n_\mathrm{off}
        """
        return self.alpha * self.n_off

    @property
    def excess(self):
        r"""Excess (float).

        .. math:: n_\mathrm{ex} = n_\mathrm{on} - \mu_\mathrm{bg}
        """
        return self.n_on - self.background

    def __str__(self):
        return (
            f"n_on = {self.n_on}\n"
            f"n_off = {self.n_off}\n"
            f"a_on = {self.a_on}\n"
            f"a_off = {self.a_off}\n"
            f"alpha = {self.alpha}\n"
            f"background = {self.background}\n"
            f"excess = {self.excess}\n"
        )
