<?php
declare(strict_types=1);

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

$data = input_json();
require_fields($data, ['id_corrida', 'id_motorista']);

try {
    $pdo = db();
    $idCorrida = (int) $data['id_corrida'];
    $idMotorista = (int) $data['id_motorista'];

    if (!corrida_ofertas_ativas($pdo)) {
        json_ok();
    }

    $pdo->beginTransaction();
    corrida_ofertas_expirar($pdo, $idCorrida);

    $stmt = $pdo->prepare(
        'UPDATE corrida_ofertas
         SET status = "recusada", respondido_em = NOW()
         WHERE id_corrida = ?
           AND id_motorista = ?
           AND status = "pendente"'
    );
    $stmt->execute([$idCorrida, $idMotorista]);
    if ($stmt->rowCount() > 0) {
        corrida_evento_registrar($pdo, $idCorrida, 'motorista_recusou', $idMotorista, 'motorista', 'pendente', 'pendente');
        motorista_metricas_corridas_recalcular($pdo, $idMotorista);
    }

    corrida_ofertas_despachar($pdo, $idCorrida);
    $pdo->commit();

    json_ok();
} catch (Throwable $e) {
    if (isset($pdo) && $pdo->inTransaction()) {
        $pdo->rollBack();
    }
    json_fail('Erro ao recusar corrida.', 500, ['error' => $e->getMessage()]);
}
