from datetime import datetime
from app.extensions import db


class SupportMessage(db.Model):
    __tablename__ = "support_messages"
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
    admin_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=True)
    subject = db.Column(db.String(200), default="")
    message = db.Column(db.Text, nullable=False)
    is_admin_reply = db.Column(db.Boolean, default=False)
    status = db.Column(db.String(20), default="open")  # open/claimed/resolved/closed
    parent_id = db.Column(db.Integer, db.ForeignKey("support_messages.id"), nullable=True)
    claimed_by_admin_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=True)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)

    user = db.relationship("User", foreign_keys=[user_id], backref="support_messages")
    admin = db.relationship("User", foreign_keys=[admin_id])
    claimed_by = db.relationship("User", foreign_keys=[claimed_by_admin_id])
    replies = db.relationship(
        "SupportMessage", cascade="all,delete-orphan",
        backref=db.backref("parent", remote_side=[id]),
        foreign_keys=[parent_id], order_by="SupportMessage.created_at"
    )

    @property
    def last_activity(self):
        if self.replies:
            return self.replies[-1].created_at
        return self.created_at


def ensure_support_columns():
    """Lightweight SQLite migration: add columns that were added later."""
    from sqlalchemy import inspect, text
    inspector = inspect(db.engine)
    if "support_messages" not in inspector.get_table_names():
        return
    existing = {c["name"] for c in inspector.get_columns("support_messages")}
    with db.engine.begin() as conn:
        if "parent_id" not in existing:
            conn.execute(text("ALTER TABLE support_messages ADD COLUMN parent_id INTEGER"))
        if "claimed_by_admin_id" not in existing:
            conn.execute(text("ALTER TABLE support_messages ADD COLUMN claimed_by_admin_id INTEGER"))
