from fastapi import HTTPException
from sqlalchemy.orm import Session

from app.api.competitor_bench_marking import schema
from app.dependency.authantication import JWTPayloadSchema
from app.locale.messages import Messages
from app.models.main.competitor_benchmarking import CompetitorBenchmarkingBase, TblCompetitorBenchmarking
from app.utils.schemas_utils import CustomResponse


class CompetitorBenchMarkingService:
    def __init__(self, db: Session, token: JWTPayloadSchema):
        self.db = db
        self.token = token
        
    async def create_competitor_bench_marking(self, request: schema.CompetitorBenchMarkingCreate):
        created_competitor_bench_marking = CompetitorBenchmarkingBase.model_validate(request.model_dump())
        TblCompetitorBenchmarking.create(created_competitor_bench_marking,self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.CREATE_COMPETITOR_BENCH_MARKING)
    
    async def get_competitor_bench_marking(self, competitor_benchmarking_id: int):
        new_get_competitor_bench_marking = TblCompetitorBenchmarking.get_by_competitor_benchmarking(competitor_benchmarking_id, self.db)
        if not competitor_benchmarking_id:
            raise HTTPException(status_code=404, detail="Competitor Bench Marking ID not found")
        return schema.CompetitorBenchmarkingResponse.model_validate(new_get_competitor_bench_marking)
    
    async def updated_competitor_benchmarking(self, request: schema.CompetitorBenchmarkingUpdate):
        update_competitor_benchmarking = CompetitorBenchmarkingBase.model_validate(request.model_dump())
        if update_competitor_benchmarking.competitorbenchmarking_id is None:
            return CustomResponse(status="-1", message=Messages.CREATE_COMPETITOR_BENCH_MARKING_NOT_FOUND)
        TblCompetitorBenchmarking.update_competitor_benchmarking(update_competitor_benchmarking.competitorbenchmarking_id,update_competitor_benchmarking,self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.COMPETITOR_BENCH_MARKING_UPDATE)
    
    async def delete_competitor_benchmarking(self, competitor_benchmarking_delete_id: int):
        deleted_competitor_benchmarking = TblCompetitorBenchmarking.delete_competitor_benchmarking(competitor_benchmarking_delete_id, self.db)
        if not deleted_competitor_benchmarking:
            return CustomResponse(status="-1", message=Messages.CREATE_COMPETITOR_BENCH_MARKING_NOT_FOUND)
        return CustomResponse(status="1", message=Messages.COMPETITOR_BENCH_MARKING_DELETE)
        
    
    