from sqlalchemy.orm import Session
from fastapi import HTTPException
from ..models import Produto as ModelProduto
from ..schemas import Schemas


class Produto():
    def get_produtos(self, session: Session):
        return session.query(ModelProduto.Produto).all()

    def add_produto(self, produto: Schemas.ProdutoComIdDoUsuario, session: Session):
        novo_produto = ModelProduto.Produto(nome=produto.nome, valor=produto.valor,  usuario_id=produto.usuario_id)
        session.add(novo_produto)
        session.commit()
        session.refresh(novo_produto)
        return novo_produto

    def put_produto(self, id: int, produto_atualizado: Schemas.ProdutoBase, session: Session):
        db_produto = session.query(ModelProduto.Produto).filter_by(id=id).first()
        if not db_produto:
            raise HTTPException(
                status_code=404,
                detail="Produto não encontrado."
            )
        produto_data = produto_atualizado.dict(exclude_unset=True)
        for key, value in produto_data.items():
            setattr(db_produto, key, value)

        session.add(db_produto)
        session.commit()
        session.refresh(db_produto)
        return db_produto

    def delete_produto(self, id: int, session: Session):
        db_produto = session.query(ModelProduto.Produto).filter_by(id=id).first()
        if not db_produto:
            raise HTTPException(
                status_code=404,
                detail="Produto não encontrado."
            )

        session.delete(db_produto)
        session.commit()
        return {
            "detail": "Produto removido com sucesso."
        }