from fastapi import HTTPException
from sqlalchemy import INTEGER,VARCHAR, Enum, ForeignKey, TIMESTAMP, FLOAT
from sqlalchemy.orm import Mapped, mapped_column, Session, relationship
from app.models.main import Base
from pydantic import Field
from datetime import datetime
from app.utils.common_utils import CdiElementEnum, FunctionalAreaEnum, OperationalAreaEnum, RightshipDbmsEnum, SeriesEnum, SireElementEnum, StcwElementEnum, TargetAudienceEnum, TmsaElementEnum
from app.utils.schemas_utils import CustomModel

class EnrollmentBase(CustomModel):
    
    enrollment_id: int | None = Field(default=None)
    course_id: int | None = Field(default=None)
    seafarer_id: int | None = Field(default=None)
    

class TblEnrollment(Base):

    __tablename__ = "enrollment"

    enrollment_id:Mapped[int] = mapped_column("enrollment_id",INTEGER,primary_key=True, nullable=True)
    course_id:Mapped[int] = mapped_column(INTEGER, ForeignKey("course_list.course_id"), nullable=True)
    seafarer_id:Mapped[int] = mapped_column(INTEGER, ForeignKey("seafarers.seafarer_id"), nullable=True)

    enrollment = relationship("TblEnrolledSeafarerInfo", back_populates="enrolled_seafarer_info")
    course = relationship("TblCourseList", back_populates="enrollments")
    seafarer = relationship("TblSeafarers", back_populates="enrollment")

    @classmethod
    def create(cls, data: EnrollmentBase, db: Session):
        new_enrollment = data.model_dump()
        new_enrollment = cls(**new_enrollment)

        db.add(new_enrollment)
        db.commit()
        return new_enrollment