<?php
declare(strict_types=1);

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

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

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

function passageiro_resumo_saldo(PDO $pdo, int $idUsuario): float
{
    $stmt = $pdo->prepare(
        'SELECT COALESCE(SUM(
            CASE
              WHEN status <> "confirmado" THEN 0
              WHEN tipo = "debito" THEN -valor
              ELSE valor
            END
        ), 0) AS saldo
         FROM passageiro_carteira_movimentos
         WHERE id_passageiro = ?'
    );
    $stmt->execute([$idUsuario]);
    return round((float) $stmt->fetchColumn(), 2);
}

try {
    $pdo = db();
    $stmt = $pdo->prepare(
        'SELECT id, nome, primeiro_nome, sobrenome, email, celular, tipo,
                endereco_cidade, endereco_uf, foto_url, passageiro_documento_status, criado_em
         FROM usuarios
         WHERE id = ?
         LIMIT 1'
    );
    $stmt->execute([$idUsuario]);
    $usuario = $stmt->fetch();
    if (!$usuario) {
        json_fail('Usuario nao encontrado.', 404);
    }

    $corridasStmt = $pdo->prepare(
        'SELECT COUNT(*) AS total
         FROM corridas
         WHERE id_passageiro = ? AND status = "finalizada"'
    );
    $corridasStmt->execute([$idUsuario]);
    $totalCorridas = (int) $corridasStmt->fetchColumn();

    $notaStmt = $pdo->prepare(
        'SELECT ROUND(AVG(nota), 2) AS media, COUNT(*) AS total
         FROM (
            SELECT nota
            FROM usuario_feedbacks
            WHERE id_usuario = ?
              AND nota IS NOT NULL
            ORDER BY criado_em DESC
            LIMIT 100
         ) ultimas'
    );
    $notaStmt->execute([$idUsuario]);
    $nota = $notaStmt->fetch() ?: ['media' => null, 'total' => 0];

    json_ok([
        'passageiro' => [
            'id' => (int) $usuario['id'],
            'nome' => (string) $usuario['nome'],
            'primeiro_nome' => $usuario['primeiro_nome'] ?: explode(' ', (string) $usuario['nome'])[0],
            'sobrenome' => $usuario['sobrenome'],
            'tipo' => (string) $usuario['tipo'],
            'email' => $usuario['email'],
            'celular' => $usuario['celular'],
            'cidade' => $usuario['endereco_cidade'],
            'uf' => $usuario['endereco_uf'],
            'foto_url' => $usuario['foto_url'],
            'passageiro_documento_status' => $usuario['passageiro_documento_status'] ?? 'nao_enviado',
            'passageiro_verificado' => ($usuario['passageiro_documento_status'] ?? '') === 'aprovado',
            'nota_media' => $nota['media'] !== null ? (float) $nota['media'] : 5.00,
            'total_avaliacoes' => (int) ($nota['total'] ?? 0),
            'total_corridas' => $totalCorridas,
            'saldo_carteira' => passageiro_resumo_saldo($pdo, $idUsuario),
        ],
    ]);
} catch (Throwable $e) {
    json_fail('Erro ao carregar resumo do passageiro.', 500, ['error' => $e->getMessage()]);
}
