from enum import Enum
from pydantic import BaseModel, Field, field_validator
from typing import Optional
from datetime import datetime

from sqlalchemy import Column, Integer, String, Text, DateTime, Enum as SqlEnum, ForeignKey
from core.database import Base


class FAQStatus(str, Enum):
    ENABLE = "enable"
    DISABLE = "disable"


class FAQ(Base):
    __tablename__ = "faqs"

    id = Column(Integer, primary_key=True, index=True)
    question = Column(String(500), nullable=False)
    answer = Column(Text, nullable=False)
    created_by = Column(Integer, ForeignKey('admins.id'), nullable=False)
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    status = Column(SqlEnum(FAQStatus), nullable=False)


class FAQCreate(BaseModel):
    """FAQ creation model"""
    question: str = Field(..., description="FAQ question")
    answer: str = Field(..., description="FAQ answer")
    status: FAQStatus = Field(default=FAQStatus.ENABLE, description="FAQ status")

    @field_validator('status', mode='before')
    @classmethod
    def validate_status(cls, v):
        if isinstance(v, str):
            v = v.lower()
        return v


class FAQUpdate(BaseModel):
    """FAQ update model"""
    question: Optional[str] = Field(None, description="FAQ question")
    answer: Optional[str] = Field(None, description="FAQ answer")
    status: Optional[FAQStatus] = Field(None, description="FAQ status")

    @field_validator('status', mode='before')
    @classmethod
    def validate_status(cls, v):
        if isinstance(v, str):
            v = v.lower()
        return v


class FAQResponse(BaseModel):
    """FAQ response model"""
    id: int
    question: str
    answer: str
    created_by: int
    created_at: datetime
    updated_at: datetime
    status: FAQStatus
