<?php
declare(strict_types=1);

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

try {
    $pdo = db();
    $idMotorista = isset($_GET['id_motorista']) ? (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.');
    }

    motorista_atualizar_localizacao($idMotorista, $_GET);

    $stmt = $pdo->prepare(
        'SELECT id
         FROM corridas
         WHERE id_motorista = ?
           AND (
                status IN ("aceita", "aguardando_embarque", "em_andamento")
                OR (
                    status = "finalizada"
                    AND avaliacao_passageiro IS NULL
                    AND finalizada_em >= DATE_SUB(NOW(), INTERVAL 48 HOUR)
                )
           )
         ORDER BY COALESCE(iniciou_viagem_em, chegou_embarque_em, aceita_em, criada_em) DESC, id DESC
         LIMIT 1'
    );
    $stmt->execute([$idMotorista]);
    $idCorrida = (int) ($stmt->fetchColumn() ?: 0);

    if ($idCorrida <= 0) {
        json_ok(['corrida' => null]);
    }

    $lat = payload_float($_GET, ['lat', 'latitude', 'ultimo_lat']);
    $lng = payload_float($_GET, ['lng', 'longitude', 'ultimo_lng']);
    $motoristaLocal = $lat !== null && $lng !== null ? ['lat' => $lat, 'lng' => $lng] : null;

    $corrida = corrida_formatar_para_motorista($pdo, $idCorrida, null, $motoristaLocal);
    if (!$corrida) {
        json_ok(['corrida' => null]);
    }

    if (($corrida['status'] ?? '') === 'finalizada' && $corrida['avaliacao_passageiro'] !== null) {
        json_ok(['corrida' => null]);
    }

    json_ok(['corrida' => $corrida]);
} catch (Throwable $e) {
    json_fail('Erro ao buscar corrida ativa.', 500, ['error' => $e->getMessage()]);
}
