<?php
declare(strict_types=1);

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

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

if ($idCorrida <= 0) {
    json_fail('Corrida nao informada.');
}

$pdo = db();
corrida_ofertas_despachar($pdo, $idCorrida);

$stmt = $pdo->prepare(
    'SELECT c.*,
            p.nome AS passageiro_nome,
            p.celular AS passageiro_celular,
            COALESCE(pc.total_corridas, 0) AS passageiro_total_corridas,
            m.id AS motorista_id,
            m.nome AS motorista_nome,
            COALESCE(NULLIF(m.foto_url, ""), m.selfie_url) AS motorista_foto_url,
            COALESCE(av.nota_media, 0) AS motorista_nota_media,
            COALESCE(av.total_avaliacoes, 0) AS motorista_total_avaliacoes,
            m.ultimo_lat AS motorista_lat,
            m.ultimo_lng AS motorista_lng,
            m.ultimo_rumo AS motorista_rumo,
            m.localizacao_atualizada_em AS motorista_localizacao_atualizada_em,
            v.id AS veiculo_id,
            v.marca AS veiculo_marca,
            v.modelo AS veiculo_modelo,
            v.cor AS veiculo_cor,
            v.ano_modelo AS veiculo_ano_modelo,
            v.placa AS veiculo_placa
     FROM corridas c
     LEFT JOIN usuarios p ON p.id = c.id_passageiro
     LEFT JOIN usuarios m ON m.id = c.id_motorista
     LEFT JOIN veiculos v ON v.id = m.id_veiculo_ativo
     LEFT JOIN (
        SELECT id_passageiro, COUNT(*) AS total_corridas
        FROM corridas
        WHERE status = "finalizada"
        GROUP BY id_passageiro
     ) pc ON pc.id_passageiro = p.id
     LEFT JOIN (
        SELECT id_motorista,
               ROUND(AVG(avaliacao_motorista), 2) AS nota_media,
               COUNT(*) AS total_avaliacoes
        FROM corridas
        WHERE avaliacao_motorista IS NOT NULL
          AND status = "finalizada"
        GROUP BY id_motorista
     ) av ON av.id_motorista = m.id
     WHERE c.id = ?
     LIMIT 1'
);
$stmt->execute([$idCorrida]);
$corrida = $stmt->fetch();

if (!$corrida) {
    json_fail('Corrida nao encontrada.', 404);
}

$corrida['id'] = (int) $corrida['id'];
$corrida['id_passageiro'] = (int) $corrida['id_passageiro'];
$corrida['id_motorista'] = $corrida['id_motorista'] === null ? null : (int) $corrida['id_motorista'];
$corrida['motorista_id'] = $corrida['motorista_id'] === null ? null : (int) $corrida['motorista_id'];
$corrida['motorista_nota_media'] = (float) ($corrida['motorista_nota_media'] ?? 0);
$corrida['motorista_total_avaliacoes'] = (int) ($corrida['motorista_total_avaliacoes'] ?? 0);
$corrida['passageiro_total_corridas'] = (int) ($corrida['passageiro_total_corridas'] ?? 0);
$corrida['motorista_lat'] = $corrida['motorista_lat'] === null ? null : (float) $corrida['motorista_lat'];
$corrida['motorista_lng'] = $corrida['motorista_lng'] === null ? null : (float) $corrida['motorista_lng'];
$corrida['motorista_rumo'] = $corrida['motorista_rumo'] === null ? null : (float) $corrida['motorista_rumo'];
$corrida['veiculo_id'] = $corrida['veiculo_id'] === null ? null : (int) $corrida['veiculo_id'];
$corrida['veiculo_ano_modelo'] = $corrida['veiculo_ano_modelo'] === null ? null : (int) $corrida['veiculo_ano_modelo'];
$codigoEmbarque = preg_replace('/\D+/', '', (string) ($corrida['codigo_embarque'] ?? ''));
if (strlen($codigoEmbarque) < 4) {
    $celular = preg_replace('/\D+/', '', (string) ($corrida['passageiro_celular'] ?? ''));
    $codigoEmbarque = $celular === '' ? '' : str_pad(substr($celular, -4), 4, '0', STR_PAD_LEFT);
}
$corrida['codigo_embarque'] = $codigoEmbarque;
$corrida['paradas'] = corrida_paradas_buscar($pdo, (int) $corrida['id']);
$corrida['total_paradas'] = count($corrida['paradas']);
unset($corrida['passageiro_celular']);
json_ok(['corrida' => $corrida]);
