from typing import List
from fastapi import APIRouter, Depends, Query
from fastapi.responses import FileResponse
from sqlalchemy.orm import Session
from app.api.reports.service  import ReportService
from app.api.reports.schema import Crew_report_by_status, Crew_report_by_type, crew_report
from app.database.main.mysql import get_db
from app.dependency.authantication import JWTManager

report_router = APIRouter()

@report_router.get("/generate_vessel_report_by_company/{company_id}", response_model_exclude=None)
async def generate_vessel_report_by_company(company_id:int, db:Session = Depends(get_db), token: dict = Depends(JWTManager.verify_token)):
    return await ReportService(db, token).create_excel_report(company_id)

@report_router.get("/generate_vessel_pdf_by_company/{company_id}", response_model_exclude=None)
async def generate_vessel_pdf_by_company(company_id:int, db: Session = Depends(get_db), token: dict = Depends(JWTManager.verify_token)):
    return await ReportService(db, token).generate_vessel_pdf(company_id)

@report_router.get("/get_all_company_vessel/{company_id}", response_model_exclude=None)
async def get_all_company_vessel(company_id : int, db: Session = Depends(get_db), token: dict = Depends(JWTManager.verify_token)):
    return await ReportService(db, token).get_all_vessel_by_company(company_id)

@report_router.post("/generate_crew_excel_by_company", response_model_exclude=None)
async def generate_crew_excel_by_company(request : crew_report| None = None, db: Session = Depends(get_db), token: dict = Depends(JWTManager.verify_token)):
    return await ReportService(db, token).crew_report_excel_by_vessel(request)

@report_router.get ("/get_all_crew/{company_id}", response_model_exclude = None)
async def get_all_crew(company_id : int , db: Session = Depends(get_db), token: dict = Depends(JWTManager.verify_token)):
    return await ReportService(db, token).get_crew_by_data(company_id)

@report_router.post("/generate_crew_pdf_report", response_model_exclude_none= None)
async def generate_crew_pdf_report(request : crew_report, db: Session = Depends(get_db), token : dict = Depends(JWTManager.verify_token)):
    return await ReportService(db, token).crew_report_pdf_by_vessel(request)

@report_router.get("/get_vessel_name_by_company/{company_id}", response_model_exclude=None)
async def get_vessel_name_by_company(company_id : int, db: Session = Depends(get_db), token : dict = Depends(JWTManager.verify_token)):
    return await ReportService(db,token).get_all_vessel_name_by_company(company_id)

@report_router.get("/get_all_seafarer_by_vessel_type/{company_id}", response_model_exclude=None)
async def get_all_seafarer_by_vesel_type(company_id : int, db:Session = Depends(get_db), token: dict = Depends(JWTManager.verify_token)):
   return await ReportService(db, token).get_all_seafarer_by_vesseltype(company_id) 

@report_router.post("/generate_seafarer_excel_by_vessel_type", response_model_exclude= None)
async def generate_seafarer_excel_by_vessel_type(request : Crew_report_by_type, db : Session = Depends(get_db), token : dict = Depends(JWTManager.verify_token)):
    return await ReportService(db, token).generate_seafarer_excel_by_vesseltype(request)

@report_router.post("/generate_seafarer_pdf_by_vessel_type", response_model_exclude= None)
async def generate_seafarer_pdf_by_vessel_type(request: Crew_report_by_type, db : Session = Depends(get_db), token : dict = Depends(JWTManager.verify_token)):
    return await ReportService(db, token).generate_seafarer_pdf_by_vesseltype(request)

@report_router.get("/get_vessel_type_company/{company_id}", response_model_exclude= None)
async def get_vessel_type_company(company_id : int, db : Session = Depends(get_db), token : dict = Depends(JWTManager.verify_token)):
    return await ReportService(db,token).get_all_vessel_type_by_company(company_id)

@report_router.get("/get_all_seafarer_status/{company_id}", response_model_exclude=None)
async def get_all_seafarer_status(company_id : int, db : Session = Depends(get_db), token : dict= Depends(JWTManager.verify_token)):
    return await ReportService(db,token).get_all_seafarer_by_status(company_id)

@report_router.post("/generate_seafarer_excel_status", response_model_exclude=None)
async def generate_seafarer_excel_status(request : Crew_report_by_status, db : Session = Depends(get_db), token : dict= Depends(JWTManager.verify_token)):
    return await ReportService(db,token).generate_seafarer_excel_by_status(request)

@report_router.post("/generate_seafarer_pdf_status", response_model_exclude=None)
async def generate_seafarer_pdf_status(request : Crew_report_by_status, db : Session = Depends(get_db), token : dict= Depends(JWTManager.verify_token)):
    return await ReportService(db,token).generate_seafarer_pdf_by_status(request)

@report_router.get("/status_dropdown", response_model_exclude=None)
async def status_dropdown(db:Session = Depends(get_db), token : dict = Depends(JWTManager.verify_token)):
    return await ReportService(db,token).seafarer_status_dropdown()

