<?php
/**
 * Script para corrigir erro 500 via web
 * Acesse: https://sistemas.pinheiroempresas.com.br/controlefrota/backend-php/corrigir-via-web.php
 */

require_once 'config/bootstrap.php';

use ControleFrotas\Config\Database;

header('Content-Type: text/html; charset=utf-8');

echo "<h1>🔧 Correção do Erro 500 - Solicitações de Viagem</h1>";

try {
    $pdo = Database::getConnection();
    echo "<p>✅ Conexão com banco estabelecida</p>";
    
    // 1. Remover foreign keys problemáticas
    echo "<h2>1. Removendo foreign keys problemáticas...</h2>";
    try {
        $pdo->exec("SET FOREIGN_KEY_CHECKS = 0");
        $pdo->exec("ALTER TABLE solicitacoes_viagem DROP FOREIGN KEY IF EXISTS fk_solicitacao_tecnico");
        $pdo->exec("ALTER TABLE solicitacoes_viagem DROP FOREIGN KEY IF EXISTS fk_solicitacao_veiculo");
        echo "<p>✅ Foreign keys removidas</p>";
    } catch (Exception $e) {
        echo "<p>⚠️ Aviso: " . $e->getMessage() . "</p>";
    }
    
    // 2. Recriar tabela
    echo "<h2>2. Recriando tabela solicitacoes_viagem...</h2>";
    $pdo->exec("DROP TABLE IF EXISTS solicitacoes_viagem");
    
    $createTable = "
    CREATE TABLE solicitacoes_viagem (
        id BIGINT AUTO_INCREMENT PRIMARY KEY,
        tecnico_id VARCHAR(50) NOT NULL,
        veiculo_id BIGINT NOT NULL,
        cliente VARCHAR(200) NOT NULL,
        motivo TEXT NOT NULL,
        km_inicial INT NOT NULL,
        latitude_inicial DECIMAL(10, 8) NULL,
        longitude_inicial DECIMAL(11, 8) NULL,
        endereco_inicial TEXT NULL,
        cliente_id BIGINT NULL,
        data_solicitacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        status ENUM('pendente', 'aprovada', 'negada', 'cancelada') DEFAULT 'pendente',
        gestor_id VARCHAR(50) NULL,
        data_resposta TIMESTAMP NULL,
        justificativa_gestor TEXT NULL,
        observacoes TEXT NULL,
        prioridade ENUM('baixa', 'normal', 'alta', 'urgente') DEFAULT 'normal',
        viagem_id BIGINT NULL,
        sincronizado BOOLEAN DEFAULT FALSE,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        INDEX idx_tecnico_id (tecnico_id),
        INDEX idx_veiculo_id (veiculo_id),
        INDEX idx_status (status),
        INDEX idx_gestor_id (gestor_id),
        INDEX idx_data_solicitacao (data_solicitacao),
        INDEX idx_prioridade (prioridade)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
    ";
    
    $pdo->exec($createTable);
    echo "<p>✅ Tabela solicitacoes_viagem recriada</p>";
    
    // 3. Criar tabela notificacoes_push
    echo "<h2>3. Criando tabela notificacoes_push...</h2>";
    $createNotificacoes = "
    CREATE TABLE IF NOT EXISTS notificacoes_push (
        id BIGINT AUTO_INCREMENT PRIMARY KEY,
        user_id VARCHAR(50) NOT NULL,
        tipo ENUM('solicitacao_viagem', 'aprovacao_viagem', 'negacao_viagem', 'cancelamento_viagem', 'viagem_iniciada', 'viagem_finalizada') NOT NULL,
        titulo VARCHAR(200) NOT NULL,
        mensagem TEXT NOT NULL,
        solicitacao_id BIGINT NULL,
        viagem_id BIGINT NULL,
        lida BOOLEAN DEFAULT FALSE,
        enviada BOOLEAN DEFAULT FALSE,
        data_envio TIMESTAMP NULL,
        fcm_token VARCHAR(500) NULL,
        fcm_message_id VARCHAR(200) NULL,
        fcm_response TEXT NULL,
        tentativas_envio INT DEFAULT 0,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        INDEX idx_user_id (user_id),
        INDEX idx_tipo (tipo),
        INDEX idx_lida (lida),
        INDEX idx_enviada (enviada),
        INDEX idx_solicitacao_id (solicitacao_id),
        INDEX idx_viagem_id (viagem_id),
        INDEX idx_created_at (created_at)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
    ";
    
    $pdo->exec($createNotificacoes);
    echo "<p>✅ Tabela notificacoes_push criada</p>";
    
    // 4. Adicionar campos na tabela motoristas
    echo "<h2>4. Adicionando campos na tabela motoristas...</h2>";
    try {
        $pdo->exec("ALTER TABLE motoristas ADD COLUMN IF NOT EXISTS token VARCHAR(255) NULL");
        $pdo->exec("ALTER TABLE motoristas ADD COLUMN IF NOT EXISTS token_validade TIMESTAMP NULL");
        $pdo->exec("ALTER TABLE motoristas ADD COLUMN IF NOT EXISTS tipo ENUM('motorista', 'gestor', 'admin') DEFAULT 'motorista'");
        echo "<p>✅ Campos adicionados na tabela motoristas</p>";
    } catch (Exception $e) {
        echo "<p>⚠️ Aviso: " . $e->getMessage() . "</p>";
    }
    
    // 5. Criar índices
    echo "<h2>5. Criando índices...</h2>";
    try {
        $pdo->exec("CREATE INDEX IF NOT EXISTS idx_motoristas_token ON motoristas(token)");
        $pdo->exec("CREATE INDEX IF NOT EXISTS idx_motoristas_tipo ON motoristas(tipo)");
        echo "<p>✅ Índices criados</p>";
    } catch (Exception $e) {
        echo "<p>⚠️ Aviso: " . $e->getMessage() . "</p>";
    }
    
    // 6. Reativar foreign key checks
    $pdo->exec("SET FOREIGN_KEY_CHECKS = 1");
    
    // 7. Testar inserção
    echo "<h2>6. Testando inserção...</h2>";
    $stmt = $pdo->prepare("INSERT INTO solicitacoes_viagem (
        tecnico_id, veiculo_id, cliente, motivo, km_inicial,
        latitude_inicial, longitude_inicial, endereco_inicial,
        observacoes, prioridade, status
    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    
    $result = $stmt->execute([
        '4', // tecnico_id
        6,   // veiculo_id
        'Cliente Teste Web',
        'Motivo Teste Web',
        100, // km_inicial
        -10.9265, // latitude_inicial
        -37.0722, // longitude_inicial
        'Endereço Teste Web',
        'Observação teste web',
        'normal', // prioridade
        'pendente' // status
    ]);
    
    if ($result) {
        $id = $pdo->lastInsertId();
        echo "<p>✅ Inserção de teste realizada com sucesso! ID: $id</p>";
        
        // Limpar teste
        $pdo->exec("DELETE FROM solicitacoes_viagem WHERE id = $id");
        echo "<p>🧹 Registro de teste removido</p>";
        
        echo "<h2>🎉 Correção concluída com sucesso!</h2>";
        echo "<p>✅ A API de solicitações deve funcionar agora.</p>";
        echo "<p>📱 Teste novamente o app Android.</p>";
    } else {
        echo "<p>❌ Erro na inserção de teste</p>";
        print_r($stmt->errorInfo());
    }
    
} catch (Exception $e) {
    echo "<h2>❌ ERRO</h2>";
    echo "<p>Erro: " . $e->getMessage() . "</p>";
    echo "<pre>" . $e->getTraceAsString() . "</pre>";
}
?> 
