from sqlalchemy.orm import Session
from ..models.VisitaComercial import VisitaComercial as ModelVisitaComercial
from ..schemas.Schemas import VisitaComercialComIdDoUsuario
from fastapi import HTTPException
from .Reagendamento import get_reagendamentos


def get_visitas_comerciais(session: Session):
    visitas_comerciais = []
    
    for visita_comercial in session.query(ModelVisitaComercial).all():
        visita_comercial.reagendamentos = get_reagendamentos(visita_comercial.id, session)
        visitas_comerciais.append(visita_comercial)

    return visitas_comerciais

def add_visita_comercial(visita_comercial: VisitaComercialComIdDoUsuario, session: Session):
    novo_visita_comercial = ModelVisitaComercial(
        usuario_id=visita_comercial.usuario_id,
        nome_da_empresa=visita_comercial.nome_da_empresa,
        data_da_visita=visita_comercial.data_da_visita,
        cep=visita_comercial.cep,
        logradouro=visita_comercial.logradouro,
        bairro=visita_comercial.bairro,
        cidade=visita_comercial.cidade,
        estado=visita_comercial.estado,
        numero=visita_comercial.numero,
        complemento=visita_comercial.complemento,
        contato=visita_comercial.contato,
        telefone=visita_comercial.telefone,
        descricao=visita_comercial.descricao
    )
    session.add(novo_visita_comercial)
    session.commit()
    session.refresh(novo_visita_comercial)
    return novo_visita_comercial

def put_visita_comercial(id: int, visita_comercial_atualizado: VisitaComercialComIdDoUsuario, session: Session):
    db_visita_comercial = session.query(ModelVisitaComercial).filter_by(id=id).first()
    if not db_visita_comercial:
        raise HTTPException(
            status_code=404,
            detail="Visita comercial não encontrada."
        )
    
    visita_comercial_data = visita_comercial_atualizado.dict(exclude_unset=True)
    for key, value in visita_comercial_data.items():
        setattr(db_visita_comercial, key, value)

    session.add(db_visita_comercial)
    session.commit()
    session.refresh(db_visita_comercial)
    return db_visita_comercial

def delete_visita_comercial(id: int, session: Session):
    db_visita_comercial = session.query(ModelVisitaComercial).filter_by(id=id).first()
    if not db_visita_comercial:
        raise HTTPException(
            status_code=404,
            detail="Visita comercial não encontrada."
        )
    session.delete(db_visita_comercial)
    session.commit()
    return {
        "detail": "Visita comercial removida com sucesso."
    }
