import uuid
from datetime import datetime

from sqlalchemy import Column, Text
from sqlmodel import Field, SQLModel

from app.db.base import TenantModel


class CommonQuestionBase(SQLModel):
    question_key: str = Field(nullable=False)
    question_text: str = Field(sa_column=Column(Text, nullable=False))
    answer: str = Field(default="", sa_column=Column(Text, nullable=False, server_default=""))
    category: str | None = Field(default=None, nullable=True)
    is_answered: bool = Field(default=False, nullable=False)


class CommonQuestion(CommonQuestionBase, TenantModel, table=True):
    __tablename__ = "common_question"

    id: str = Field(default_factory=lambda: str(uuid.uuid4()), primary_key=True)


class CommonQuestionCreate(SQLModel):
    question_key: str
    question_text: str
    category: str | None = None


class CommonQuestionCreateCustom(SQLModel):
    question_text: str
    category: str | None = None


class CommonQuestionRead(CommonQuestionBase):
    id: str
    restaurant_id: str
    created_at: datetime
    updated_at: datetime | None = None


class CommonQuestionUpdate(SQLModel):
    answer: str | None = None


class CommonQuestionBulkItem(SQLModel):
    id: str
    answer: str


class CommonQuestionBulkUpdate(SQLModel):
    items: list[CommonQuestionBulkItem]


class CommonQuestionGrouped(SQLModel):
    category: str
    questions: list[CommonQuestionRead]
