"""Per-printer supply alert state.

The supply poller (flask printers check-toner-alerts) is stateless: it reads
live levels from Zabbix each run. To alert once per downward crossing (and
re-arm after a refill) it needs to remember the last tier it alerted for each
printer + supply. One row per (printerid, supplykey); supplykey is the toner
color (black/cyan/magenta/yellow) or the raw item name when color is unknown.
"""

from shopdb.api import db, BaseModel


class PrinterSupplyAlert(BaseModel):
    """Last-alerted tier for one printer supply. lasttier in ok/warning/critical."""

    __tablename__ = 'printersupplyalerts'

    printersupplyalertid = db.Column(db.Integer, primary_key=True)
    printerid = db.Column(
        db.Integer,
        db.ForeignKey('printers.printerid', ondelete='CASCADE'),
        nullable=False,
        index=True,
    )
    supplykey = db.Column(
        db.String(64),
        nullable=False,
        comment='Toner color, or Zabbix item name when color is unknown',
    )
    lasttier = db.Column(
        db.String(16),
        nullable=False,
        default='ok',
        comment='Last tier alerted: ok, warning, or critical',
    )

    __table_args__ = (
        db.UniqueConstraint('printerid', 'supplykey',
                            name='uq_printersupplyalert_printer_key'),
    )
