<?php
declare(strict_types=1);

require_once __DIR__ . '/../config/helpers.php';
require_once __DIR__ . '/../config/indicacoes_helpers.php';

$data = input_json();
$idUsuario = (int) ($_GET['id_usuario'] ?? $_GET['id_passageiro'] ?? $data['id_usuario'] ?? $data['id_passageiro'] ?? 0);

if ($idUsuario <= 0) {
    json_fail('Usuario nao informado.');
}

try {
    $usuario = indicacoes_usuario_base($idUsuario);
    if (!$usuario) {
        json_fail('Usuario nao encontrado.', 404);
    }

    $indicador = null;
    if (!empty($usuario['indicador_codigo'])) {
        $stmt = db()->prepare('SELECT id, nome, tipo FROM usuarios WHERE codigoind = ? LIMIT 1');
        $stmt->execute([(string) $usuario['indicador_codigo']]);
        $indicador = $stmt->fetch() ?: null;
        if ($indicador) {
            $indicador['id'] = (int) $indicador['id'];
        }
    }

    $criadoEm = new DateTimeImmutable((string) $usuario['criado_em']);
    $prazoIndicador = $criadoEm->modify('+7 days');
    $agora = new DateTimeImmutable('now');
    $temIndicador = trim((string) ($usuario['indicador_codigo'] ?? '')) !== '';
    $podeInformarIndicador = !$temIndicador && $agora <= $prazoIndicador;
    $tipoUsuario = (string) $usuario['tipo'];

    json_ok([
        'indicacoes' => [
            'codigo' => $usuario['codigoind'],
            'tipo_usuario' => $tipoUsuario,
            'indicado_por_codigo' => $usuario['indicador_codigo'],
            'indicado_por' => $indicador,
            'pode_informar_indicador' => $podeInformarIndicador,
            'prazo_indicador_ate' => $prazoIndicador->format('Y-m-d H:i:s'),
            'pode_indicar_passageiros' => true,
            'pode_indicar_motoristas' => $tipoUsuario === 'motorista',
            'regra' => $tipoUsuario === 'motorista'
                ? 'Motoristas podem indicar motoristas e passageiros.'
                : 'Passageiros podem indicar apenas passageiros.',
            'conta_completa' => indicacoes_conta_completa($usuario),
            'resumo' => indicacoes_resumo_usuario($idUsuario),
            'extrato' => indicacoes_extrato_usuario($idUsuario),
            'retiradas' => indicacoes_retiradas_usuario($idUsuario),
        ],
    ]);
} catch (Throwable $e) {
    json_fail('Erro ao carregar indicacoes.', 500, ['error' => $e->getMessage()]);
}
