<?php
/**
 * API para Aprovar/Negar Solicitações de Viagem - Versão Simplificada
 */

header('Content-Type: application/json');

// Configuração básica de conexão
$host = 'localhost';
$dbname = 'pinheir3_controle_frotasV1.1';
$username = 'pinheir3_admin';
$password = '080880Gelboy';

// Função para conectar ao banco
function getConnection() {
    global $host, $dbname, $username, $password;
    
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $pdo;
    } catch (Exception $e) {
        return null;
    }
}

// Função para enviar resposta de sucesso
function sendSuccess($data, $message = 'Sucesso') {
    echo json_encode([
        'success' => true,
        'timestamp' => date('Y-m-d H:i:s'),
        'message' => $message,
        'data' => $data
    ]);
    exit;
}

// Função para enviar resposta de erro
function sendError($message, $code = 400) {
    http_response_code($code);
    echo json_encode([
        'success' => false,
        'timestamp' => date('Y-m-d H:i:s'),
        'message' => $message
    ]);
    exit;
}

// Verificar método HTTP
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    sendError('Método não permitido', 405);
}

// Verificar ação
$acao = $_GET['acao'] ?? '';
if (!in_array($acao, ['aprovar', 'negar'])) {
    sendError('Ação não reconhecida', 400);
}

try {
    // Obter dados da requisição
    $input = json_decode(file_get_contents('php://input'), true);
    
    if (!$input || !isset($input['solicitacao_id'])) {
        sendError('ID da solicitação obrigatório', 400);
    }

    $solicitacaoId = $input['solicitacao_id'];
    $gestorId = $input['gestor_id'] ?? 'admin';
    $justificativa = $input['justificativa'] ?? '';

    // Conectar ao banco
    $pdo = getConnection();
    if (!$pdo) {
        sendError('Erro de conexão com banco de dados', 500);
    }

    // Verificar se a solicitação existe
    $stmt = $pdo->prepare("SELECT * FROM solicitacoes_viagem WHERE id = ? AND status = 'pendente'");
    $stmt->execute([$solicitacaoId]);
    $solicitacao = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$solicitacao) {
        sendError('Solicitação não encontrada ou já processada', 404);
    }

    // Atualizar status da solicitação
    $novoStatus = ($acao === 'aprovar') ? 'aprovada' : 'negada';
    
    $sql = "UPDATE solicitacoes_viagem SET 
                status = ?, 
                gestor_id = ?, 
                observacoes = ?, 
                data_resposta = NOW() 
            WHERE id = ?";

    $stmt = $pdo->prepare($sql);
    $result = $stmt->execute([
        $novoStatus,
        $gestorId,
        $justificativa,
        $solicitacaoId
    ]);

    if (!$result) {
        $error = $stmt->errorInfo();
        sendError('Erro ao atualizar solicitação: ' . $error[2], 500);
    }

    // Se foi aprovada, criar viagem
    if ($acao === 'aprovar') {
        $viagemId = criarViagem($pdo, $solicitacao);
        sendSuccess([
            'solicitacao_id' => $solicitacaoId,
            'viagem_id' => $viagemId,
            'status' => 'aprovada',
            'mensagem' => 'Solicitação aprovada com sucesso!'
        ]);
    } else {
        sendSuccess([
            'solicitacao_id' => $solicitacaoId,
            'status' => 'negada',
            'mensagem' => 'Solicitação negada com sucesso!'
        ]);
    }

} catch (Exception $e) {
    sendError('Erro interno: ' . $e->getMessage(), 500);
}

// Função para criar viagem após aprovação
function criarViagem($pdo, $solicitacao) {
    $sql = "INSERT INTO viagens (
        tecnico_id, veiculo_id, cliente, motivo, km_inicial,
        latitude_inicial, longitude_inicial, observacoes, data_inicio
    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW())";

    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        $solicitacao['tecnico_id'],
        $solicitacao['veiculo_id'],
        $solicitacao['cliente'],
        $solicitacao['motivo'],
        $solicitacao['km_inicial'],
        $solicitacao['latitude_inicial'],
        $solicitacao['longitude_inicial'],
        $solicitacao['observacoes']
    ]);

    $viagemId = $pdo->lastInsertId();

    // Atualizar solicitação com o ID da viagem
    $stmt = $pdo->prepare("UPDATE solicitacoes_viagem SET viagem_id = ? WHERE id = ?");
    $stmt->execute([$viagemId, $solicitacao['id']]);

    return $viagemId;
}
?> 
