from sqlalchemy.orm import Session
from ..models import LancamentoDespesa as ModelLancamentoDespesa
from ..schemas import Schemas
from fastapi import HTTPException

def get_todos_os_lancamentos(session: Session):
    return session.query(ModelLancamentoDespesa.LancamentoDespesa).order_by(
        ModelLancamentoDespesa.LancamentoDespesa.data_lancamento.asc()
    ).all()

def get_lancamentos_by_despesa(id_despesa: int, session: Session):
    return session.query(ModelLancamentoDespesa.LancamentoDespesa).filter_by(despesa_id=id_despesa).all()

def get_lancamentos_validacao(session: Session):
    return session.query(ModelLancamentoDespesa.LancamentoDespesa).filter_by(variavel_validado=ModelLancamentoDespesa.VariavelValidado.Nao).all()

def add_lancamento(lancamento: Schemas.LancamentoDespesaBase, session: Session):
    lancamento_db = ModelLancamentoDespesa.LancamentoDespesa(
        despesa_id=lancamento.despesa_id,
        data_lancamento=lancamento.data_lancamento,
        valor=lancamento.valor,
        variavel_validado=lancamento.variavel_validado,
        anexo_caminho=None
    )

    session.add(lancamento_db)
    session.commit()
    session.refresh(lancamento_db)
    return lancamento_db

def update_lancamento(lancamento: Schemas.ValidacaoDespesaVariavel, session: Session):
    lancamento_db = session.query(ModelLancamentoDespesa.LancamentoDespesa).filter_by(id=lancamento.id).first()
    
    if not lancamento_db:
        raise HTTPException(
            status_code=404,
            detail="Lançamento não encontrado."
        )
    
    lancamento_db.valor = lancamento.valor
    lancamento_db.variavel_validado = ModelLancamentoDespesa.VariavelValidado.Sim
    session.add(lancamento_db)
    session.commit()
    session.refresh(lancamento_db)
    return lancamento_db

