-- Script para corrigir problemas de chaves estrangeiras
-- Execute este script diretamente no MySQL/phpMyAdmin

-- 1. REMOVER CHAVES ESTRANGEIRAS PROBLEMÁTICAS (se existirem)
SET foreign_key_checks = 0;

-- Tentar remover FKs que podem estar causando problemas
DROP INDEX IF EXISTS fk_solicitacao_tecnico ON solicitacoes_viagem;
DROP INDEX IF EXISTS fk_solicitacao_veiculo ON solicitacoes_viagem;
DROP INDEX IF EXISTS fk_solicitacao_cliente ON solicitacoes_viagem;
DROP INDEX IF EXISTS fk_solicitacao_gestor ON solicitacoes_viagem;

-- Remover constraints de FK se existirem
ALTER TABLE solicitacoes_viagem DROP FOREIGN KEY IF EXISTS fk_solicitacao_tecnico;
ALTER TABLE solicitacoes_viagem DROP FOREIGN KEY IF EXISTS fk_solicitacao_veiculo;
ALTER TABLE solicitacoes_viagem DROP FOREIGN KEY IF EXISTS fk_solicitacao_cliente;
ALTER TABLE solicitacoes_viagem DROP FOREIGN KEY IF EXISTS fk_solicitacao_gestor;

-- 2. RECRIAR TABELA SOLICITACOES_VIAGEM SE NECESSÁRIO
DROP TABLE IF EXISTS solicitacoes_viagem_backup;

-- Fazer backup se a tabela já existir
CREATE TABLE IF NOT EXISTS solicitacoes_viagem_backup AS 
SELECT * FROM solicitacoes_viagem LIMIT 0;

-- Recriar a tabela sem FKs
DROP TABLE IF EXISTS solicitacoes_viagem;

CREATE TABLE solicitacoes_viagem (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tecnico_id INT NOT NULL,
    veiculo_id INT NULL,
    cliente_id INT NULL,
    motivo TEXT NOT NULL,
    prioridade ENUM('baixa', 'normal', 'alta', 'urgente') DEFAULT 'normal',
    latitude DECIMAL(10, 8) NULL,
    longitude DECIMAL(11, 8) NULL,
    endereco TEXT NULL,
    status ENUM('pendente', 'aprovada', 'negada') DEFAULT 'pendente',
    gestor_id INT NULL,
    resposta_gestor TEXT NULL,
    data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    data_resposta TIMESTAMP NULL,
    
    -- Índices para performance (sem FKs)
    INDEX idx_status (status),
    INDEX idx_tecnico (tecnico_id),
    INDEX idx_veiculo (veiculo_id),
    INDEX idx_cliente (cliente_id),
    INDEX idx_gestor (gestor_id),
    INDEX idx_data_criacao (data_criacao)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 3. CRIAR TABELAS AUXILIARES
CREATE TABLE IF NOT EXISTS notificacoes_push (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    tipo ENUM('solicitacao_viagem', 'aprovacao_viagem', 'negacao_viagem') NOT NULL,
    titulo VARCHAR(255) NOT NULL,
    mensagem TEXT NOT NULL,
    dados_extras JSON NULL,
    lida BOOLEAN DEFAULT FALSE,
    data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_usuario_lida (usuario_id, lida),
    INDEX idx_tipo (tipo),
    INDEX idx_data_criacao (data_criacao)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS fcm_tokens (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    token VARCHAR(500) NOT NULL,
    dispositivo VARCHAR(255) NULL,
    data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    data_atualizacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    UNIQUE KEY unique_usuario_token (usuario_id, token(255)),
    INDEX idx_usuario (usuario_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 4. INSERIR DADOS DE TESTE
INSERT IGNORE INTO solicitacoes_viagem (
    tecnico_id, 
    motivo, 
    prioridade, 
    latitude, 
    longitude, 
    endereco, 
    status
) VALUES (
    1, 
    'Solicitação de teste - Viagem para manutenção preventiva',
    'normal',
    -23.5505,
    -46.6333,
    'São Paulo, SP - Brasil',
    'pendente'
);

INSERT IGNORE INTO notificacoes_push (
    usuario_id,
    tipo,
    titulo,
    mensagem,
    lida
) VALUES (
    1,
    'solicitacao_viagem',
    'Nova Solicitação de Viagem',
    'Técnico solicita viagem para manutenção preventiva',
    FALSE
);

-- 5. Reativar verificação de FKs
SET foreign_key_checks = 1;

-- Verificar se tudo foi criado corretamente
SELECT 'Tabelas criadas com sucesso!' as status;
SELECT COUNT(*) as solicitacoes FROM solicitacoes_viagem;
SELECT COUNT(*) as notificacoes FROM notificacoes_push;
SELECT COUNT(*) as tokens FROM fcm_tokens; 