from flask import Blueprint, jsonify, request
from agenda_mod.services import consultas_service as consultas
from agenda_mod.services import dados_service as dados

api_bp = Blueprint('api', __name__)


def body():
    return request.get_json(silent=True) or {}


@api_bp.get('/consultas')
def listar_consultas():
    return jsonify(consultas.listar_consultas())


@api_bp.get('/consultas/<int:consulta_id>')
def obter_consulta(consulta_id):
    c = consultas.obter_consulta(consulta_id)
    return (jsonify(c), 200) if c else (jsonify({'erro': 'Consulta não encontrada'}), 404)


@api_bp.post('/consultas')
def criar_consulta():
    resultado = consultas.criar_consulta(body(), forcar=request.args.get('forcar') == '1')
    status = 201 if resultado.get('ok') else 409
    return jsonify(resultado), status


@api_bp.put('/consultas/<int:consulta_id>')
def atualizar_consulta(consulta_id):
    resultado = consultas.atualizar_consulta(consulta_id, body())
    status = 200 if resultado.get('ok') else 409
    return jsonify(resultado), status


@api_bp.delete('/consultas/<int:consulta_id>')
def apagar_consulta(consulta_id):
    return jsonify(consultas.apagar_consulta(consulta_id))


@api_bp.post('/consultas/<int:consulta_id>/remarcar-proximo-mes')
def remarcar_proximo_mes(consulta_id):
    resultado = consultas.remarcar_proximo_mes(consulta_id)
    status = 201 if resultado.get('ok') else 409
    return jsonify(resultado), status


@api_bp.get('/estatisticas')
def estatisticas():
    return jsonify(consultas.estatisticas())


@api_bp.get('/painel-hoje')
def painel_hoje():
    return jsonify(consultas.painel_hoje())


@api_bp.get('/lembretes')
def lembretes():
    return jsonify(consultas.proximos_lembretes())


@api_bp.get('/historico')
def historico():
    return jsonify(consultas.historico_utente(request.args.get('q', '')))


@api_bp.get('/consultas/<int:consulta_id>/consumos')
def consumos(consulta_id):
    return jsonify(consultas.consumos_da_consulta(consulta_id))


@api_bp.post('/consultas/<int:consulta_id>/consumos')
def adicionar_consumo(consulta_id):
    data = body()
    return jsonify(consultas.adicionar_consumo(consulta_id, data.get('produto', '').strip(), int(data.get('quantidade', 1))))


@api_bp.get('/empresas')
def empresas():
    return jsonify(dados.listar_empresas())


@api_bp.post('/empresas')
def criar_empresa():
    return jsonify(dados.criar_empresa(body())), 201


@api_bp.get('/utentes')
def utentes():
    return jsonify(dados.listar_utentes(request.args.get('empresa_id')))


@api_bp.post('/utentes')
def criar_utente():
    return jsonify(dados.criar_utente(body())), 201


@api_bp.get('/medicos')
def medicos():
    return jsonify(dados.listar_medicos())


@api_bp.post('/medicos')
def criar_medico():
    return jsonify(dados.criar_medico(body())), 201


@api_bp.get('/lista-espera')
def lista_espera():
    return jsonify(dados.listar_espera())


@api_bp.post('/lista-espera')
def criar_espera():
    return jsonify(dados.criar_espera(body())), 201


@api_bp.delete('/lista-espera/<int:item_id>')
def remover_espera(item_id):
    return jsonify(dados.remover_espera(item_id))
