<?php
declare(strict_types=1);

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

$idMotorista = (int) ($_GET['id_motorista'] ?? 0);
if ($idMotorista <= 0) {
    $data = input_json();
    $idMotorista = (int) ($data['id_motorista'] ?? 0);
}

if ($idMotorista <= 0) {
    json_fail('Motorista nao informado.');
}

try {
    $promocao = usuario_garantir_motorista($idMotorista);
    $usuario = indicacoes_usuario_base($idMotorista);
    if (!$usuario || $usuario['tipo'] !== 'motorista') {
        json_fail('Motorista 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;

    json_ok([
        'tipo_convertido_motorista' => $promocao['foi_promovido'],
        'indicador_removido' => $promocao['indicador_removido'],
        'indicacoes' => [
            'codigo' => $usuario['codigoind'],
            'indicado_por_codigo' => $usuario['indicador_codigo'],
            'indicado_por' => $indicador,
            'pode_informar_indicador' => $podeInformarIndicador,
            'prazo_indicador_ate' => $prazoIndicador->format('Y-m-d H:i:s'),
            'conta_completa' => indicacoes_conta_completa($usuario),
            'resumo' => indicacoes_resumo_usuario($idMotorista),
            'extrato' => indicacoes_extrato_usuario($idMotorista),
            'retiradas' => indicacoes_retiradas_usuario($idMotorista),
        ],
    ]);
} catch (Throwable $e) {
    json_fail('Erro ao carregar indicacoes.', 500, ['error' => $e->getMessage()]);
}
