from sqlalchemy.orm import Session
from fastapi import HTTPException
from ..models import Servico as ModelServico
from ..schemas import Schemas


class Servico:
    def get_servicos(self, session: Session):
        return session.query(ModelServico.Servico).all()

    def add_servico(self, servico: Schemas.ServicoComIdDoUsuario, session: Session):
        novo_servico = ModelServico.Servico(
            nome=servico.nome,
            valor=servico.valor,
            tipo=servico.tipo,
            usuario_id=servico.usuario_id
        )
        session.add(novo_servico)
        session.commit()
        session.refresh(novo_servico)
        return novo_servico

    def put_servico(self, id: int, servico_atualizado: Schemas.ServicoBase, session: Session):
        db_servico = session.query(ModelServico.Servico).filter_by(id=id).first()
        if not db_servico:
            raise HTTPException(
                status_code=404,
                detail="Serviço não encontrado."
            )
        servico_data = servico_atualizado.dict(exclude_unset=True)
        for key, value in servico_data.items():
            setattr(db_servico, key, value)

        session.add(db_servico)
        session.commit()
        session.refresh(db_servico)
        return db_servico

    def delete_servico(self, id: int, session: Session):
        db_servico = session.query(ModelServico.Servico).filter_by(id=id).first()
        if not db_servico:
            raise HTTPException(
                status_code=404,
                detail="Serviço não encontrado."
            )

        session.delete(db_servico)
        session.commit()
        return {
            "detail": "Serviço removido com sucesso."
        }