from sqlalchemy.orm import Session
from datetime import datetime
from app.utils.schemas_utils import CustomResponse
from app.models.main.enrollment import TblEnrollment, EnrollmentBase
from app.models.main.enrolledseafarerinfo import TblEnrolledSeafarerInfo, EnrolledSeafarerInfoBase
from app.models.main.seafarer import TblSeafarers
from app.api.enrollment.schema import createEnrollment, createEnrollmentSeafarerCourse, GetCourseDetails, coursePriority
from app.models.main.course_list import TblCourseList
from fastapi import HTTPException
class EnrollmentService:
    def __init__(self, db: Session, token: dict):
        self.db = db
        self.token = token

    async def create_enrollment(self, request: createEnrollment):
        payload = request
        seafarer = self.db.query(TblSeafarers).filter(TblSeafarers.seafarer_id == payload.seafarer_id).first()
        if not seafarer:
            raise HTTPException(status_code=404, detail="Seafarer ID not found")
        for course_id in payload.course_id:

            course = self.db.query(TblCourseList).filter(TblCourseList.course_id == course_id).first()
            if not course:
                raise HTTPException(status_code=404,detail=f"Course ID {course_id} not found")

            enrollment = TblEnrollment(
                seafarer_id=payload.seafarer_id,
                course_id=course_id
            )

            self.db.add(enrollment)
            self.db.flush()     

            enrollment_course = TblEnrolledSeafarerInfo(
                enrollment_id=enrollment.enrollment_id,
                enroll_date=datetime.utcnow(),
                course_name=course.course_name,
                pass_score=course.pass_percentage,
                operational_area=course.operational_area,
                functional_area=course.functional_area,
                target_audience=course.target_audience,
            )

            self.db.add(enrollment_course)

        self.db.commit()

        return CustomResponse(status="1",message="Enrollment created successfully")

    async def course_priority(self, request: coursePriority):
        payload = EnrolledSeafarerInfoBase.model_validate(request)
        enrollment = self.db.query(TblEnrolledSeafarerInfo) .filter(TblEnrolledSeafarerInfo.es_id == payload.es_id).first()
        if not enrollment:
            raise HTTPException(status_code=404, detail="Enrollment ID not found")
        enrollment.prioritize = payload.prioritize
        self.db.commit()
        return CustomResponse(status = "1", message= "Course priority updated successfully")

    async def delete_enrolled_course(self, es_id:int):
        enrolled_course = self.db.query(TblEnrolledSeafarerInfo).filter(TblEnrolledSeafarerInfo.es_id == es_id).first()
        enrollment = self.db.query(TblEnrollment).filter(TblEnrollment.enrollment_id == enrolled_course.enrollment_id).first()
        if not enrolled_course:
            raise HTTPException(status_code=404, detail="Enrollment ID not found")
        if not enrollment:
            raise HTTPException(status_code=404, detail="Student Not Enrolled for this Course")
        self.db.delete(enrolled_course)
        self.db.delete(enrollment)
        self.db.commit()
        return CustomResponse(status="1", message="Enrollment deleted successfully")

    async def get_all_enrollemn(self):
        enrolled_data = self.db.query(TblEnrolledSeafarerInfo).all()
        if not enrolled_data:
            raise HTTPException(status = "404", message = "Data Not Found")
        return enrolled_data 








    
        
        

