from sqlalchemy.orm import Session
from ..models.Fornecedor import Fornecedor as ModelFornecedor
from ..schemas.Schemas import FornecedorComIdDoUsuario
from fastapi import HTTPException


def get_fornecedores(session: Session):
    return session.query(ModelFornecedor).all()

def add_fornecedor(fornecedor: FornecedorComIdDoUsuario, session: Session):
    novo_fornecedor = ModelFornecedor(
        usuario_id=fornecedor.usuario_id,
        razao_social=fornecedor.razao_social,
        nome_fantasia=fornecedor.nome_fantasia,
        responsavel=fornecedor.responsavel,
        observacoes=fornecedor.observacoes,
        cnpj=fornecedor.cnpj,
        email=fornecedor.email,
        telefone=fornecedor.telefone,
        cep=fornecedor.cep,
        logradouro=fornecedor.logradouro,
        bairro=fornecedor.bairro,
        cidade=fornecedor.cidade,
        estado=fornecedor.estado,
        numero=fornecedor.numero,
        complemento=fornecedor.complemento,
        banco=fornecedor.banco,
        agencia=fornecedor.agencia,
        conta=fornecedor.conta,
        titular=fornecedor.titular,
        pix=fornecedor.pix
    )
    session.add(novo_fornecedor)
    session.commit()
    session.refresh(novo_fornecedor)
    return novo_fornecedor

def put_fornecedor(id: int, fornecedor_atualizado: FornecedorComIdDoUsuario, session: Session):
    db_fornecedor = session.query(ModelFornecedor).filter_by(id=id).first()
    if not db_fornecedor:
        raise HTTPException(
            status_code=404,
            detail="Fornecedor não encontrado."
        )
    
    fornecedor_data = fornecedor_atualizado.dict(exclude_unset=True)
    for key, value in fornecedor_data.items():
        setattr(db_fornecedor, key, value)

    session.add(db_fornecedor)
    session.commit()
    session.refresh(db_fornecedor)
    return db_fornecedor

def delete_fornecedor(id: int, session: Session):
    db_fornecedor = session.query(ModelFornecedor).filter_by(id=id).first()
    if not db_fornecedor:
        raise HTTPException(
            status_code=404,
            detail="Fornecedor não encontrado."
        )
    session.delete(db_fornecedor)
    session.commit()
    return {
        "detail": "Fornecedor removido com sucesso."
    }
