from pydantic import Field
from sqlalchemy import INTEGER, ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship, Session
from app.models.main import Base
from app.utils.schemas_utils import CustomModel

class CompanyCourseRoleMapBase(CustomModel):
    course_map_id: int | None = Field(default=None)
    course_id: int | None = Field(default=None)
    role_map_id: int | None = Field(default=None)

class TblCompanyCourseRoleMap(Base):
    __tablename__ = "company_course_role_map"

    course_map_id: Mapped[int] = mapped_column("course_map_id", INTEGER, primary_key=True, autoincrement=True)
    course_id: Mapped[int] = mapped_column("course_id",INTEGER,ForeignKey("course_list.course_id", ondelete="CASCADE"),nullable=False,)
    role_map_id: Mapped[int] = mapped_column("role_map_id",INTEGER,ForeignKey("tbl_company_role_map.role_map_id", ondelete="CASCADE"),nullable=False,)
    
    course = relationship("TblCourseList", back_populates="company_course_roles")
    company_role_map = relationship("TblCompanyRoleMap", back_populates="course_roles")

    def __init__(self,course_id: int,role_map_id: int):
        self.course_id = course_id
        self.role_map_id = role_map_id

    @classmethod
    def create(cls, data: CompanyCourseRoleMapBase, db: Session) -> "TblCompanyCourseRoleMap":
        data_dict = data.model_dump(exclude_unset=True)
        new_data = cls(**data_dict)
        db.add(new_data)
        db.flush()
        return new_data
