"""PrinterData model - printer-specific fields linked to machines."""

from shopdb.extensions import db
from shopdb.core.models.base import BaseModel


class PrinterData(BaseModel):
    """
    Printer-specific data linked to Machine table.

    Printers are stored in the machines table (machinetype.category = 'Printer').
    This table only holds printer-specific fields not in machines.

    IP address is stored in the communications table.
    Zabbix data is queried in real-time via API (not cached here).
    """
    __tablename__ = 'printerdata'

    id = db.Column(db.Integer, primary_key=True)

    # Link to machine
    machineid = db.Column(
        db.Integer,
        db.ForeignKey('machines.machineid', ondelete='CASCADE'),
        unique=True,
        nullable=False,
        index=True
    )

    # Windows/Network naming
    windowsname = db.Column(
        db.String(255),
        comment='Windows printer name (e.g., \\\\server\\printer)'
    )
    sharename = db.Column(
        db.String(100),
        comment='CSF/share name'
    )

    # Installation
    iscsf = db.Column(db.Boolean, default=False, comment='Is CSF printer')
    installpath = db.Column(db.String(255), comment='Driver install path')

    # Printer PIN (for secure print)
    pin = db.Column(db.String(20))

    # Relationship
    machine = db.relationship(
        'Machine',
        backref=db.backref('printerdata', uselist=False, lazy='joined')
    )

    __table_args__ = (
        db.Index('idx_printerdata_windowsname', 'windowsname'),
    )

    def __repr__(self):
        return f"<PrinterData machineid={self.machineid}>"
