<?php
/**
 * Script final para completar o sistema de operadores GPS
 * Controle de Frotas - Pinheiro Empresas
 */

require_once 'config/database.php';

echo "<h1>🚗 Finalizando Sistema de Operadores GPS</h1>";
echo "<h2>Corrigindo problemas identificados...</h2>";

try {
    $pdo = Database::getConnection();
    
    // 1. Verificar e adicionar coluna observacoes na tabela solicitacoes_rotas
    echo "<h3>1. Verificando coluna 'observacoes' na tabela solicitacoes_rotas...</h3>";
    try {
        $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE 'observacoes'");
        if ($stmt->rowCount() == 0) {
            $pdo->exec("ALTER TABLE solicitacoes_rotas ADD COLUMN observacoes TEXT NULL AFTER descricao");
            echo "✅ Coluna 'observacoes' adicionada<br>";
        } else {
            echo "✅ Coluna 'observacoes' já existe<br>";
        }
    } catch (Exception $e) {
        echo "⚠️ Erro ao verificar/adicionar coluna 'observacoes': " . $e->getMessage() . "<br>";
    }
    
    // 2. Adicionar campos restantes na tabela solicitacoes_rotas
    echo "<h3>2. Adicionando campos restantes na tabela solicitacoes_rotas...</h3>";
    
    $camposRestantes = [
        'observacoes_operador' => 'TEXT NULL',
        'ip_liberacao' => 'VARCHAR(45) NULL',
        'user_agent_liberacao' => 'TEXT NULL'
    ];
    
    foreach ($camposRestantes as $campo => $definicao) {
        try {
            $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE '$campo'");
            if ($stmt->rowCount() == 0) {
                $pdo->exec("ALTER TABLE solicitacoes_rotas ADD COLUMN $campo $definicao");
                echo "✅ Campo '$campo' adicionado<br>";
            } else {
                echo "✅ Campo '$campo' já existe<br>";
            }
        } catch (Exception $e) {
            echo "⚠️ Erro ao verificar/adicionar campo '$campo': " . $e->getMessage() . "<br>";
        }
    }
    
    // 3. Criar tabela de logs de liberação
    echo "<h3>3. Criando tabela de logs de liberação...</h3>";
    try {
        $sql = "CREATE TABLE IF NOT EXISTS logs_liberacao_partida (
            id BIGINT AUTO_INCREMENT PRIMARY KEY,
            operador_gps_id INT NOT NULL,
            operador_gps_nome VARCHAR(100) NOT NULL,
            tipo_liberacao ENUM('viagem', 'rota') NOT NULL,
            registro_id BIGINT NOT NULL COMMENT 'ID da viagem ou rota',
            veiculo_id BIGINT,
            veiculo_modelo VARCHAR(100),
            veiculo_placa VARCHAR(20),
            tecnico_id VARCHAR(50),
            tecnico_nome VARCHAR(100),
            cliente VARCHAR(200),
            motivo TEXT,
            ip_liberacao VARCHAR(45),
            user_agent_liberacao TEXT,
            observacoes TEXT,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
        
        $pdo->exec($sql);
        echo "✅ Tabela 'logs_liberacao_partida' criada/verificada<br>";
        
        // Adicionar índices
        try {
            $pdo->exec("CREATE INDEX IF NOT EXISTS idx_operador ON logs_liberacao_partida (operador_gps_id)");
            $pdo->exec("CREATE INDEX IF NOT EXISTS idx_tipo_registro ON logs_liberacao_partida (tipo_liberacao, registro_id)");
            $pdo->exec("CREATE INDEX IF NOT EXISTS idx_veiculo ON logs_liberacao_partida (veiculo_id)");
            $pdo->exec("CREATE INDEX IF NOT EXISTS idx_tecnico ON logs_liberacao_partida (tecnico_id)");
            $pdo->exec("CREATE INDEX IF NOT EXISTS idx_data ON logs_liberacao_partida (created_at)");
            echo "✅ Índices dos logs criados/verificados<br>";
        } catch (Exception $e) {
            echo "⚠️ Índices dos logs já existem ou erro: " . $e->getMessage() . "<br>";
        }
        
    } catch (Exception $e) {
        echo "❌ Erro ao criar tabela logs_liberacao_partida: " . $e->getMessage() . "<br>";
    }
    
    // 4. Criar view para relatórios
    echo "<h3>4. Criando view para relatórios...</h3>";
    try {
        $sql = "CREATE OR REPLACE VIEW vw_liberacoes_partida AS
        SELECT 
            'viagem' as tipo,
            v.id as registro_id,
            v.operador_gps_id,
            v.operador_gps_nome,
            v.data_liberacao_partida,
            v.veiculo_id,
            ve.modelo as veiculo_modelo,
            ve.placa as veiculo_placa,
            v.tecnico_id,
            m.nome as tecnico_nome,
            v.cliente,
            v.motivo,
            v.observacoes_operador,
            v.ip_liberacao,
            v.user_agent_liberacao
        FROM viagens v
        LEFT JOIN veiculos ve ON v.veiculo_id = ve.id
        LEFT JOIN motoristas m ON (v.tecnico_id = m.id OR v.tecnico_id = m.nome)
        WHERE v.operador_gps_id IS NOT NULL

        UNION ALL

        SELECT 
            'rota' as tipo,
            sr.id as registro_id,
            sr.operador_gps_id,
            sr.operador_gps_nome,
            sr.data_liberacao_partida,
            sr.veiculo_id,
            ve.modelo as veiculo_modelo,
            ve.placa as veiculo_placa,
            sr.motorista_id as tecnico_id,
            m.nome as tecnico_nome,
            sr.titulo as cliente,
            sr.descricao as motivo,
            sr.observacoes_operador,
            sr.ip_liberacao,
            sr.user_agent_liberacao
        FROM solicitacoes_rotas sr
        LEFT JOIN veiculos ve ON sr.veiculo_id = ve.id
        LEFT JOIN motoristas m ON sr.motorista_id = m.id
        WHERE sr.operador_gps_id IS NOT NULL";
        
        $pdo->exec($sql);
        echo "✅ View 'vw_liberacoes_partida' criada/atualizada<br>";
        
    } catch (Exception $e) {
        echo "❌ Erro ao criar view: " . $e->getMessage() . "<br>";
    }
    
    // 5. Inserir operadores se a tabela estiver vazia
    echo "<h3>5. Verificando operadores...</h3>";
    try {
        $stmt = $pdo->query("SELECT COUNT(*) as total FROM operadores_gps");
        $result = $stmt->fetch();
        
        if ($result['total'] == 0) {
            echo "Tabela vazia, inserindo operadores de exemplo...<br>";
            
            $operadores = [
                ['João Silva', 'joao.gps', password_hash('password', PASSWORD_DEFAULT), 'joao.gps@pinheiroempresas.com.br', '(11) 99999-1111', 'operador'],
                ['Maria Santos', 'maria.gps', password_hash('password', PASSWORD_DEFAULT), 'maria.gps@pinheiroempresas.com.br', '(11) 99999-2222', 'operador'],
                ['Pedro Costa', 'pedro.gps', password_hash('password', PASSWORD_DEFAULT), 'pedro.gps@pinheiroempresas.com.br', '(11) 99999-3333', 'supervisor'],
                ['Ana Oliveira', 'ana.gps', password_hash('password', PASSWORD_DEFAULT), 'ana.gps@pinheiroempresas.com.br', '(11) 99999-4444', 'admin']
            ];
            
            $stmt = $pdo->prepare("INSERT INTO operadores_gps (nome, usuario, senha, email, telefone, nivel_acesso) VALUES (?, ?, ?, ?, ?, ?)");
            
            foreach ($operadores as $operador) {
                $stmt->execute($operador);
                echo "✅ Operador '{$operador[0]}' inserido<br>";
            }
        } else {
            echo "✅ Tabela já possui " . $result['total'] . " operadores<br>";
        }
    } catch (Exception $e) {
        echo "❌ Erro ao verificar/inserir operadores: " . $e->getMessage() . "<br>";
    }
    
    // 6. Testar a view
    echo "<h3>6. Testando view...</h3>";
    try {
        $stmt = $pdo->query("SELECT COUNT(*) as total FROM vw_liberacoes_partida");
        $result = $stmt->fetch();
        echo "✅ View funcionando - " . $result['total'] . " registros encontrados<br>";
    } catch (Exception $e) {
        echo "❌ Erro ao testar view: " . $e->getMessage() . "<br>";
    }
    
    // 7. Mostrar resumo final
    echo "<h3>7. Resumo final da configuração:</h3>";
    echo "<div style='background: #e8f5e8; padding: 15px; border-radius: 5px; margin: 10px 0;'>";
    echo "<strong>✅ Sistema de Operadores GPS configurado com sucesso!</strong><br><br>";
    echo "<strong>Credenciais de teste:</strong><br>";
    echo "• Usuário: <code>joao.gps</code> | Senha: <code>password</code><br>";
    echo "• Usuário: <code>maria.gps</code> | Senha: <code>password</code><br>";
    echo "• Usuário: <code>pedro.gps</code> | Senha: <code>password</code><br>";
    echo "• Usuário: <code>ana.gps</code> | Senha: <code>password</code><br><br>";
    echo "<strong>Links importantes:</strong><br>";
    echo "• <a href='operador-gps/login.php' target='_blank'>Login do Operador GPS</a><br>";
    echo "• <a href='admin/monitoramento-solicitacoes.html' target='_blank'>Monitoramento de Solicitações</a><br>";
    echo "<br><strong>Status do sistema:</strong><br>";
    echo "• ✅ Tabela operadores_gps: OK<br>";
    echo "• ✅ Tabela logs_liberacao_partida: OK<br>";
    echo "• ✅ View vw_liberacoes_partida: OK<br>";
    echo "• ✅ Campos nas tabelas viagens e solicitacoes_rotas: OK<br>";
    echo "</div>";
    
} catch (Exception $e) {
    echo "<div style='background: #ffebee; color: #c62828; padding: 15px; border-radius: 5px; margin: 10px 0;'>";
    echo "<strong>❌ Erro na configuração:</strong><br>";
    echo $e->getMessage();
    echo "</div>";
}
?>
