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

require_once 'config/database.php';

echo "<h1>🚗 Sistema de Operadores GPS</h1>";
echo "<h2>Executando configuração...</h2>";

try {
    $pdo = Database::getConnection();
    
    // 1. Criar tabela de operadores GPS
    echo "<h3>1. Criando tabela de operadores GPS...</h3>";
    $sql = "CREATE TABLE IF NOT EXISTS operadores_gps (
        id INT AUTO_INCREMENT PRIMARY KEY,
        nome VARCHAR(100) NOT NULL,
        usuario VARCHAR(50) UNIQUE NOT NULL,
        senha VARCHAR(255) NOT NULL,
        email VARCHAR(100),
        telefone VARCHAR(20),
        status ENUM('ativo', 'inativo') DEFAULT 'ativo',
        nivel_acesso ENUM('operador', 'supervisor', 'admin') DEFAULT 'operador',
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        
        INDEX idx_usuario (usuario),
        INDEX idx_status (status),
        INDEX idx_nivel_acesso (nivel_acesso)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
    
    $pdo->exec($sql);
    echo "✅ Tabela 'operadores_gps' criada/verificada<br>";
    
    // 2. Adicionar campos na tabela viagens
    echo "<h3>2. Adicionando campos na tabela viagens...</h3>";
    
    // Verificar se os campos já existem
    $stmt = $pdo->query("SHOW COLUMNS FROM viagens LIKE 'operador_gps_id'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE viagens ADD COLUMN operador_gps_id INT NULL AFTER tecnico_id");
        echo "✅ Campo 'operador_gps_id' adicionado<br>";
    } else {
        echo "✅ Campo 'operador_gps_id' já existe<br>";
    }
    
    $stmt = $pdo->query("SHOW COLUMNS FROM viagens LIKE 'operador_gps_nome'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE viagens ADD COLUMN operador_gps_nome VARCHAR(100) NULL AFTER operador_gps_id");
        echo "✅ Campo 'operador_gps_nome' adicionado<br>";
    } else {
        echo "✅ Campo 'operador_gps_nome' já existe<br>";
    }
    
    $stmt = $pdo->query("SHOW COLUMNS FROM viagens LIKE 'data_liberacao_partida'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE viagens ADD COLUMN data_liberacao_partida TIMESTAMP NULL AFTER data_inicio");
        echo "✅ Campo 'data_liberacao_partida' adicionado<br>";
    } else {
        echo "✅ Campo 'data_liberacao_partida' já existe<br>";
    }
    
    $stmt = $pdo->query("SHOW COLUMNS FROM viagens LIKE 'observacoes_operador'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE viagens ADD COLUMN observacoes_operador TEXT NULL AFTER observacoes");
        echo "✅ Campo 'observacoes_operador' adicionado<br>";
    } else {
        echo "✅ Campo 'observacoes_operador' já existe<br>";
    }
    
    $stmt = $pdo->query("SHOW COLUMNS FROM viagens LIKE 'ip_liberacao'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE viagens ADD COLUMN ip_liberacao VARCHAR(45) NULL AFTER observacoes_operador");
        echo "✅ Campo 'ip_liberacao' adicionado<br>";
    } else {
        echo "✅ Campo 'ip_liberacao' já existe<br>";
    }
    
    $stmt = $pdo->query("SHOW COLUMNS FROM viagens LIKE 'user_agent_liberacao'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE viagens ADD COLUMN user_agent_liberacao TEXT NULL AFTER ip_liberacao");
        echo "✅ Campo 'user_agent_liberacao' adicionado<br>";
    } else {
        echo "✅ Campo 'user_agent_liberacao' já existe<br>";
    }
    
    // 3. Adicionar campos na tabela solicitacoes_rotas
    echo "<h3>3. Adicionando campos na tabela solicitacoes_rotas...</h3>";
    
    $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE 'operador_gps_id'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE solicitacoes_rotas ADD COLUMN operador_gps_id INT NULL AFTER gestor_id");
        echo "✅ Campo 'operador_gps_id' adicionado<br>";
    } else {
        echo "✅ Campo 'operador_gps_id' já existe<br>";
    }
    
    $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE 'operador_gps_nome'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE solicitacoes_rotas ADD COLUMN operador_gps_nome VARCHAR(100) NULL AFTER operador_gps_id");
        echo "✅ Campo 'operador_gps_nome' adicionado<br>";
    } else {
        echo "✅ Campo 'operador_gps_nome' já existe<br>";
    }
    
    $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE 'data_liberacao_partida'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE solicitacoes_rotas ADD COLUMN data_liberacao_partida TIMESTAMP NULL AFTER created_at");
        echo "✅ Campo 'data_liberacao_partida' adicionado<br>";
    } else {
        echo "✅ Campo 'data_liberacao_partida' já existe<br>";
    }
    
    $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE 'observacoes_operador'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE solicitacoes_rotas ADD COLUMN observacoes_operador TEXT NULL AFTER observacoes");
        echo "✅ Campo 'observacoes_operador' adicionado<br>";
    } else {
        echo "✅ Campo 'observacoes_operador' já existe<br>";
    }
    
    $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE 'ip_liberacao'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE solicitacoes_rotas ADD COLUMN ip_liberacao VARCHAR(45) NULL AFTER observacoes_operador");
        echo "✅ Campo 'ip_liberacao' adicionado<br>";
    } else {
        echo "✅ Campo 'ip_liberacao' já existe<br>";
    }
    
    $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE 'user_agent_liberacao'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("ALTER TABLE solicitacoes_rotas ADD COLUMN user_agent_liberacao TEXT NULL AFTER ip_liberacao");
        echo "✅ Campo 'user_agent_liberacao' adicionado<br>";
    } else {
        echo "✅ Campo 'user_agent_liberacao' já existe<br>";
    }
    
    // 4. Inserir operadores de exemplo
    echo "<h3>4. Inserindo operadores de exemplo...</h3>";
    $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 (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE nome = VALUES(nome), email = VALUES(email), telefone = VALUES(telefone)");
    
    foreach ($operadores as $operador) {
        $stmt->execute($operador);
        echo "✅ Operador '{$operador[0]}' inserido/atualizado<br>";
    }
    
    // 5. Criar tabela de logs de liberação
    echo "<h3>5. Criando tabela de logs de liberação...</h3>";
    $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,
        
        INDEX idx_operador (operador_gps_id),
        INDEX idx_tipo_registro (tipo_liberacao, registro_id),
        INDEX idx_veiculo (veiculo_id),
        INDEX idx_tecnico (tecnico_id),
        INDEX idx_data (created_at)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
    
    $pdo->exec($sql);
    echo "✅ Tabela 'logs_liberacao_partida' criada/verificada<br>";
    
    // 6. Criar view para relatórios
    echo "<h3>6. Criando view para relatórios...</h3>";
    $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>";
    
    // 7. Mostrar resumo
    echo "<h3>7. Resumo 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 "</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>";
}
?>
