import app.api.segment.schemas as schemas
from sqlalchemy.orm import Session
from app.locale.messages import Messages
from app.models.main.segment import SegmentBase, TblSegment
from app.utils.schemas_utils import CustomResponse
from typing import List

class SegmentService:
    def __init__(self, db: Session,token):
        self.db = db
        self.token = token

    # async def create_Segment(self, request: schemas.SegmentCreate):
    #     created_segment = SegmentBase.model_validate(request)
    #     TblSegment.create(created_segment, self.db)
    #     self.db.commit()
    #     return CustomResponse(status="1", message=Messages.SEGMENT_CREAT)

    # async def create_segment(self, request:List[schemas.SegmentCreate]):
    #     created_segment = []
    #     create = SegmentBase.model_validate(request)
    #     for item in create:
    #         sale = TblSegment.create(item, self.db)
    #         created_segment.append(sale)
    #     self.db.commit()
    #     return CustomResponse(status="1", message=Messages.SEGMENT_CREAT)
    
    async def create_segment(self, request_list: List[schemas.SegmentCreate]):
        for request in request_list:
            validated_data = SegmentBase.model_validate(request)
            if not validated_data.name:
                raise ValueError("Name cannot be null")
            TblSegment.create(validated_data, self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.SEGMENT_CREAT)


    async def update_segment(self, request: schemas.SegmentUpdate):
        updated_segment = SegmentBase.model_validate(request)
        if updated_segment.segment_id is None:
            return CustomResponse(status="-1", message=Messages.SEGMENT_NOT_FOUND)
        TblSegment.update(updated_segment.segment_id,updated_segment, self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.SEGMENT_UPDATE)

    async def get_segment(self, group_id: int):
        segment = TblSegment.get_by_group_id(group_id, self.db)
        if not segment:
            return CustomResponse(status="-1", message=Messages.SEGMENT_NOT_FOUND)
        return [schemas.SegmantResponse.model_validate(group_get) for group_get in segment]

    async def delete_segment(self, group_id: int):
        deleted = TblSegment.delete(group_id, self.db)
        if not deleted:
            return CustomResponse(status="-1", message=Messages.CATCHMENT_NOT_FOUND)
        return CustomResponse(status="1", message=Messages.SEGMENT_DELETED)
