from typing import List
from fastapi import HTTPException
from app.api.vendor_metrics_priority_list import schema
from app.dependency.authantication import JWTPayloadSchema
from sqlalchemy.orm import Session
from app.models.main.vendor_metrics_priority_list import TblVendorMetricsPriorityList, VendorMetricsPriorityListBase
from app.utils.schemas_utils import CustomResponse
from app.locale.messages import Messages

class VendorMetricsPriorityListService:
    def __init__(self, db:Session, token:JWTPayloadSchema):
        self.db = db
        self.token = token
        
    async def create_vendor_metrics_priority_list(self, request:schema.VendorMetricsPriorityListCreate):
        created__vendor_metrics_priority_list = VendorMetricsPriorityListBase.model_validate(request.model_dump())
        TblVendorMetricsPriorityList.create_vendor_metrics_priority_list(created__vendor_metrics_priority_list, self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.VENDOR_METRICS_PRIORITY)
    
    async def get_vendor_metrics_priority_list(self, vendor_get_id:int):
        new_get_vendor_metrics_priority_list = TblVendorMetricsPriorityList.get_vendor_metrics_priority_list(vendor_get_id, self.db)
        if not new_get_vendor_metrics_priority_list:
            raise HTTPException(status_code=404, detail="Get vendor ID not found")
        return schema.VendorMetricsPriorityListResponse.model_validate(new_get_vendor_metrics_priority_list)
    
    async def get_group_vendor_metrics_priority_list(self, group_id:int) ->"TblVendorMetricsPriorityList":
        new_get_group_vendor_metrics_priority_list = self.db.query(TblVendorMetricsPriorityList).filter(TblVendorMetricsPriorityList.group_id == group_id).all()
        if not new_get_group_vendor_metrics_priority_list:
            raise HTTPException(status_code=404, detail="Get group ID not found")
        return [schema.VendorMetricsPriorityListResponse.model_validate(get_group_id) for get_group_id in new_get_group_vendor_metrics_priority_list]
    
    async def update_vendor_metrics_priority_list(self, request:List[schema.VendorMetricsPriorityListUpdate]):
        for req in request:
            updated_vendor_metrics_priority_list = VendorMetricsPriorityListBase.model_validate(req.model_dump())
            if updated_vendor_metrics_priority_list.vendor_id is None:
                return CustomResponse("-1", message=Messages.VENDOR_METRICS_PRIORITY_NOT)
            TblVendorMetricsPriorityList.update_vendor_metrics_priority_list(updated_vendor_metrics_priority_list.vendor_id, updated_vendor_metrics_priority_list, self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.VENDOR_METRICS_PRIORITY_UPDATE)
    
    async def delete_vendor_metrics_priority_list(self, vendor_id:int):
        deleted_vendor_metrics_priority_list = TblVendorMetricsPriorityList.delete_vendor_metrics_priority_list(vendor_id, self.db)
        if not deleted_vendor_metrics_priority_list:
            return CustomResponse(status="-1", message=Messages.VENDOR_METRICS_PRIORITY_NOT)
        return CustomResponse(status="1", message=Messages.VENDOR_METRICS_PRIORITY_DELETE)
            
        

