<?php
declare(strict_types=1);

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

$data = input_json();
$idCorrida = (int) ($data['id_corrida'] ?? $_GET['id_corrida'] ?? 0);
$idUsuario = (int) ($data['id_usuario'] ?? $_GET['id_usuario'] ?? 0);
$tipo = (string) ($data['tipo_usuario'] ?? $_GET['tipo_usuario'] ?? '');

if ($idCorrida <= 0 || $idUsuario <= 0) {
    json_fail('Corrida ou usuario nao informado.');
}

if (!in_array($tipo, ['passageiro', 'motorista'], true)) {
    json_fail('Tipo de usuario invalido.');
}

try {
    $pdo = db();
    $stmt = $pdo->prepare(
        'SELECT id, id_passageiro, id_motorista, status, finalizada_em, cancelada_em
         FROM corridas
         WHERE id = ?
         LIMIT 1'
    );
    $stmt->execute([$idCorrida]);
    $corrida = $stmt->fetch();
    if (!$corrida) {
        json_fail('Corrida nao encontrada.', 404);
    }

    $autorizado = $tipo === 'passageiro'
        ? (int) $corrida['id_passageiro'] === $idUsuario
        : (int) ($corrida['id_motorista'] ?? 0) === $idUsuario;
    if (!$autorizado) {
        json_fail('Usuario sem permissao para compartilhar esta corrida.', 403);
    }

    if (in_array((string) $corrida['status'], ['finalizada', 'cancelada'], true)) {
        $row = [
            'ativo' => 1,
            'status' => (string) $corrida['status'],
            'finalizada_em' => $corrida['finalizada_em'] ?? null,
            'cancelada_em' => $corrida['cancelada_em'] ?? null,
            'expira_em' => null,
        ];
        if (corrida_compartilhamento_esta_expirado($row)) {
            json_fail('Esta corrida ja encerrou o periodo de compartilhamento.', 410);
        }
    }

    $token = corrida_compartilhamento_novo_token();
    $ins = $pdo->prepare(
        'INSERT INTO corrida_compartilhamentos
            (id_corrida, token_hash, criado_por_usuario, criado_por_tipo, expira_em)
         VALUES (?, ?, ?, ?, DATE_ADD(NOW(), INTERVAL 24 HOUR))'
    );
    $ins->execute([
        $idCorrida,
        corrida_compartilhamento_token_hash($token),
        $idUsuario,
        $tipo,
    ]);

    json_ok([
        'url' => corrida_compartilhamento_public_url($token),
        'token' => $token,
        'valido_ate_finalizar' => true,
        'minutos_apos_fim' => CORRIDA_COMPARTILHAMENTO_GRACA_MINUTOS,
    ]);
} catch (Throwable $e) {
    json_fail('Erro ao criar link de acompanhamento.', 500, ['error' => $e->getMessage()]);
}
