from fastapi import Request, BackgroundTasks, HTTPException,status
from sqlalchemy.orm import Session, joinedload
from schema.report_schema import ReportCreateSchema
from models.job_model import JobService, JobStatus
from backgroundtask.report_generate import generate_project_report_pdf

def create_report(payload:ReportCreateSchema,request:Request, background_task:BackgroundTasks, db:Session):
    try:
        if not payload.project_id:
            raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Project id is required to generate report")
        requester_email=request.state.user.email

        # create the job_first and then later we will update this in the background task
        create_new_job=JobService(
            job_name=payload.report_name or "Project Report",
            created_by=request.state.user.id,
            status=JobStatus.CREATED,
            project_id=payload.project_id
        )
        db.add(create_new_job)
        db.commit()
        db.refresh(create_new_job)
        background_task.add_task(
            generate_project_report_pdf, 
            payload.project_id, 
            requester_email, 
            create_new_job.id, 
            db,
            payload.report_name,
            payload.statuses,
            payload.assignee_ids,
            payload.reporter_ids,
            payload.priorities,
            payload.types,
            payload.label_ids,
            payload.release_names
        )
        return {
            "message":"Report generation is in progress",
            "job_info":create_new_job
        }
    except HTTPException as e:
        raise 
    except Exception as e:
        return HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Error while creating report {str(e)}")