from datetime import datetime
from typing import Optional
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field
from sqlalchemy.orm import Mapped,mapped_column,relationship,Session
from sqlalchemy import DateTime, ForeignKey, Integer,VARCHAR,Enum ,Text, func
from app.models.base_class import Base
 
 
class SupportQueryBase(BaseModel):
    support_id : int | None = Field(default=None)
    admin_id : int | None = Field(default=None)
    name : str | None = Field(default=None)
    date : datetime | None = Field(default=None)
    status : str | None = Field(default=None)
    email_id : str | None = Field(default=None)
    query_type : str | None = Field(default=None)
    query_statement : str | None = Field(default=None)
    institution_name : str | None = Field(default=None)
    response_statement : Optional[str] = None 
 
 
class TblSupportQuery(Base):
    __tablename__ = "tbl_support_query"
    support_id : Mapped[int] = mapped_column("support_id", Integer, primary_key=True, autoincrement=True)
    admin_id : Mapped[int] = mapped_column("admin_id", Integer, nullable=True, server_default=None)
    name : Mapped[str] = mapped_column("name", Text, nullable=True, server_default=None)
    date: Mapped[datetime] = mapped_column("date", DateTime(timezone=True), server_default=func.now(), nullable=True)
    status : Mapped[str] = mapped_column("status", VARCHAR(50), nullable=True, server_default=None)
    email_id : Mapped[str] = mapped_column("email_id", VARCHAR(50), nullable=True, server_default=None)
    query_type : Mapped[str] = mapped_column("query_type", Text, nullable=True, server_default=None)
    query_statement : Mapped[str] = mapped_column("query_statement", Text, nullable=True, server_default=None)
    institution_name : Mapped[str] = mapped_column("institution_name", Text, nullable=True, server_default=None)
    response_statement : Mapped[str] = mapped_column("response_statement", Text, nullable=True, server_default=None)
 
    @classmethod
    def create_query_response(cls, data:SupportQueryBase, db:Session) -> "TblSupportQuery":
        new_data = cls(**data.model_dump())
        db.add(new_data)
        db.flush()
        return new_data
   
    @classmethod
    def get_query_response(cls, db:Session) -> "TblSupportQuery":
        get_data = db.query(cls).all()
        return get_data
   
    