"""Self-hosted employee directory.

For sites with no external HR database. When employee_directory_mode is
'selfhosted', the employee lookup APIs read this app-owned table instead of the
external directory, and the directory is managed in-app (CRUD + CSV import).

to_dict emits the same keys the external contract returns (SSO, First_Name,
Last_Name, Team, Role, Picture) so the frontend and both modes share one shape.

photofilename holds the basename of an uploaded photo (photo-<sso><ext>) served
from instance/employeephotos/. It is distinct from the legacy Picture text
field: in self-hosted mode the displayed photo comes from uploads (photofilename)
via the shared resolver, not from Picture.
"""

from shopdb.api import db


class DirectoryEmployee(db.Model):
    __tablename__ = 'directoryemployees'

    sso = db.Column(db.Integer, primary_key=True, autoincrement=False)
    firstname = db.Column(db.String(100), nullable=False)
    lastname = db.Column(db.String(100), nullable=False)
    team = db.Column(db.String(100))
    role = db.Column(db.String(100))
    picture = db.Column(db.String(255))
    # basename of an uploaded photo (photo-<sso><ext>); None when no upload
    photofilename = db.Column(db.String(255))

    def to_dict(self):
        # Keys match the external employees contract the frontend consumes.
        # photofilename is extra (self-hosted upload); the resolved display URL
        # is added as photourl by the API layer via resolve_employee_photo_url.
        return {
            'SSO': self.sso,
            'First_Name': self.firstname,
            'Last_Name': self.lastname,
            'Team': self.team,
            'Role': self.role,
            'Picture': self.picture,
            'photofilename': self.photofilename,
        }
