<?php
session_start();
date_default_timezone_set('America/Sao_Paulo');

$pedidos_file  = 'db/pedidos.json'; 
$file_usuarios = 'usuarios.json';

// Inicializa arquivos se não existirem
if (!is_dir('db')) { mkdir('db', 0777, true); }
if (!file_exists($pedidos_file)) { file_put_contents($pedidos_file, json_encode([])); }
$pedidos = json_decode(file_get_contents($pedidos_file), true) ?? [];

// --- 1. IDENTIFICAÇÃO DO USUÁRIO ---
$meu_cpf_logado = $_SESSION['usuario_cpf'] ?? null;
$meu_nome_logado = $_SESSION['usuario_nome'] ?? 'Entregador';
$meu_id_sessao = $_SESSION['usuario_id'] ?? $_SESSION['cliente_id'] ?? null;

// --- 2. TRAVA DE PEDIDO ATIVO PARA CLIENTE ---
$status_liberados = ["Viagem Concluída", "Cancelado", "Cancelado pelo Cliente", "Recebido", "Concluído"];
$travado = false;
if ($meu_id_sessao) {
    foreach ($pedidos as $p) {
        $id_no_pedido = $p['cliente_id'] ?? $p['usuario_id'] ?? null;
        if ($id_no_pedido == $meu_id_sessao && !in_array($p['status'], $status_liberados)) {
            $travado = true;
            break;
        }
    }
}

// --- 3. CLIENTE SOLICITANDO CORRIDA (SOLICITAR) ---
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['solicitar_corrida'])) {
    if ($travado) { die("Erro: Você já tem um pedido ativo!"); }

    $usuarios = json_decode(file_get_contents($file_usuarios), true) ?: [];
    $valor_total = (float)$_POST['valor_total'];
    $usuario_id = $_SESSION['usuario_id'];
    $tem_saldo = false;

    foreach ($usuarios as $u) {
        if ($u['id'] == $usuario_id) {
            if ((float)$u['saldo'] >= $valor_total) { $tem_saldo = true; break; }
        }
    }

    if ($tem_saldo) {
        $id_pedido = uniqid(); 
        $novo_pedido = [
            "id"              => $id_pedido,
            "cliente_id"      => $usuario_id,
            "produto"         => $_POST['produto'] ?? 'Corrida',
            "estacao"         => $_POST['estacao_brt'] ?? 'Não informada',
            "status"          => "Pendente", 
            "data"            => date("d/m/Y H:i"),
            "valor"           => $valor_total,
            "entregador_id"   => "OFFLINE", 
            "entregador_nome" => "Nenhum"
        ];
        $pedidos[] = $novo_pedido;
        file_put_contents($pedidos_file, json_encode($pedidos, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
        header("Location: rastreio.php?id=" . $id_pedido);
        exit;
    } else {
        die("Erro: Saldo insuficiente!");
    }
}

// --- 4. ENTREGADOR ACEITANDO CORRIDA (ONDE O DÉBITO OCORRE) ---
if (isset($_GET['aceitar_id'])) {
    $id_alvo = trim((string)$_GET['aceitar_id']);
    
    if (!$meu_cpf_logado) {
        die("Erro: Sessão expirou. Faça login novamente como entregador.");
    }

    $usuarios = json_decode(file_get_contents($file_usuarios), true) ?? [];
    $cobranca_ok = false;
    $pedido_editado = false;

    foreach ($pedidos as &$p) {
        // Compara ID limpando qualquer resíduo de string
        if (trim((string)$p['id']) === $id_alvo) {
            
            // Verifica se a corrida está livre
            if (strtoupper(trim($p['entregador_id'])) !== "OFFLINE") {
                header("Location: radar.php?erro=ja_aceita");
                exit;
            }

            $idCliente = $p['cliente_id'];
            $valorCorrida = (float)$p['valor'];

            // BUSCA O CLIENTE PARA DEBITAR
            foreach ($usuarios as &$u) {
                if ($u['id'] == $idCliente) {
                    $saldo_disponivel = (float)$u['saldo'];
                    
                    if ($saldo_disponivel >= $valorCorrida) {
                        $u['saldo'] = $saldo_disponivel - $valorCorrida; // SUBTRAÇÃO REAL
                        $cobranca_ok = true;
                    }
                    break;
                }
            }

            if ($cobranca_ok) {
                // Atualiza os dados do pedido
                $p['entregador_id'] = $meu_cpf_logado;
                $p['entregador_nome'] = $meu_nome_logado;
                $p['status'] = "Entregador a caminho";
                
                $pedido_editado = true;
                break;
            } else {
                // Se não cobrou (ex: saldo acabou no meio tempo), cancela o aceite
                header("Location: radar.php?erro=saldo_cliente");
                exit;
            }
        }
    }

    if ($pedido_editado) {
        // SALVA OS DOIS ARQUIVOS PARA EFETIVAR O DÉBITO E O ACEITE
        file_put_contents($file_usuarios, json_encode($usuarios, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
        file_put_contents($pedidos_file, json_encode($pedidos, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
        
        header("Location: painel_entregador.php?id=" . $id_alvo);
        exit;
    } else {
        die("Erro: Pedido não encontrado ou já processado.");
    }
}
?>