from datetime import datetime
from pydantic import BaseModel, Field
from sqlalchemy.orm import Mapped, mapped_column, relationship, Session
from sqlalchemy import DateTime, Integer, ForeignKey, func
from app.models.base_class import Base

class CategorySimulationBase(BaseModel):
    cat_sim_id : int | None = Field(default=None)
    category_id : int | None = Field(default=None)

class TblCategorySimulation(Base):
    __tablename__= "tbl_category_simulation"
    cat_sim_id : Mapped[int] = mapped_column("cat_sim_id", Integer, primary_key=True, autoincrement=True)
    category_id : Mapped[int] = mapped_column("category_id", ForeignKey("tbl_master.master_id"))
    simulation_id: Mapped[int] = mapped_column(ForeignKey("tbl_simulation.simulation_id"))
    created_at : Mapped[datetime] = mapped_column("created_at", DateTime(timezone=True), server_default=func.now(), nullable=False)
    updated_at : Mapped[datetime] = mapped_column("updated_at", DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False)
    
    master = relationship("TblMaster", back_populates="category_simulation")
    simulation = relationship("TblSimulation", back_populates="category_simulation")
    
    
    @classmethod
    def create(cls, data:CategorySimulationBase, db:Session) ->"TblCategorySimulation":
        create_data = cls(**data.model_dump())
        db.add(create_data)
        db.flush()
        return create_data
     
    
    