from datetime import datetime, timedelta
from app.extensions import db


class EmailVerification(db.Model):
    __tablename__ = "email_verifications"
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
    code = db.Column(db.String(10), nullable=False)
    purpose = db.Column(db.String(30), default="signup")
    expires_at = db.Column(db.DateTime, nullable=False)
    used = db.Column(db.Boolean, default=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

    user = db.relationship("User", foreign_keys=[user_id])

    @classmethod
    def create(cls, user_id, purpose="signup"):
        from app.services.auth_service import generate_otp
        code = generate_otp(6)
        obj = cls(
            user_id=user_id,
            code=code,
            purpose=purpose,
            expires_at=datetime.utcnow() + timedelta(minutes=15),
        )
        db.session.add(obj)
        db.session.flush()
        return obj


class AppSetting(db.Model):
    __tablename__ = "app_settings"
    id = db.Column(db.Integer, primary_key=True)
    key = db.Column(db.String(80), unique=True, nullable=False)
    value = db.Column(db.Text, default="{}")
    category = db.Column(db.String(40), default="general")
    description = db.Column(db.String(200))
    updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)


class SiteConfig(db.Model):
    """تنظیمات عمومی سایت - قابل ویرایش توسط ادمین"""
    __tablename__ = "site_config"
    id = db.Column(db.Integer, primary_key=True)
    site_name = db.Column(db.String(100), default="FIGHTSKILL")
    site_logo = db.Column(db.String(255))  # مسیر فایل لوگو
    site_background = db.Column(db.String(255))  # تصویر بکگراند سایت
    hero_image = db.Column(db.String(255))  # تصویر هیرو
    about_image = db.Column(db.String(255))  # تصویر درباره ما
    footer_text = db.Column(db.Text)  # متن فوتر
    updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
