from app.extensions import db
from .base import TimestampMixin


class NotificationTemplate(TimestampMixin, db.Model):
    __tablename__ = "notification_templates"
    id = db.Column(db.Integer, primary_key=True)
    event_code = db.Column(db.String(100), nullable=False, index=True)
    channel = db.Column(db.String(30), nullable=False)
    subject = db.Column(db.String(255))
    body = db.Column(db.Text, nullable=False)
    is_active = db.Column(db.Boolean, nullable=False, default=True)

    __table_args__ = (
        db.UniqueConstraint("event_code", "channel", name="uq_notification_template"),
    )


class Notification(TimestampMixin, db.Model):
    __tablename__ = "notifications"
    id = db.Column(db.Integer, primary_key=True)
    employee_id = db.Column(db.Integer, db.ForeignKey("employees.id"), nullable=False, index=True)
    event_code = db.Column(db.String(100), nullable=False)
    title = db.Column(db.String(255), nullable=False)
    message = db.Column(db.Text, nullable=False)
    link_url = db.Column(db.String(500))
    read_at = db.Column(db.DateTime)


class NotificationDeliveryLog(TimestampMixin, db.Model):
    __tablename__ = "notification_delivery_logs"
    id = db.Column(db.Integer, primary_key=True)
    notification_id = db.Column(db.Integer, db.ForeignKey("notifications.id"))
    employee_id = db.Column(db.Integer, db.ForeignKey("employees.id"), nullable=False)
    channel = db.Column(db.String(30), nullable=False)
    recipient = db.Column(db.String(255), nullable=False)
    status = db.Column(db.String(30), nullable=False)
    provider_message_id = db.Column(db.String(255))
    error_message = db.Column(db.Text)
