-- Migração para sistema de notificações fiscais
-- Criado em: 2024-12-19

CREATE TABLE IF NOT EXISTS fiscal_notifications (
    id INT AUTO_INCREMENT PRIMARY KEY,
    type ENUM('nfce_rejection', 'nfe_rejection', 'cte_rejection', 'sped_deadline', 'cert_expiry', 'general_alert') NOT NULL,
    title VARCHAR(255) NOT NULL,
    message TEXT NOT NULL,
    severity ENUM('low', 'medium', 'high', 'critical') DEFAULT 'medium',
    status ENUM('unread', 'read', 'dismissed') DEFAULT 'unread',
    
    -- Dados contextuais
    document_type VARCHAR(20) NULL, -- 'nfce', 'nfe', 'cte', 'sped'
    document_id VARCHAR(100) NULL,  -- chave de acesso ou identificador
    rejection_code VARCHAR(10) NULL, -- código de rejeição da SEFAZ
    
    -- Metadados
    user_id INT NULL,
    company_id INT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    read_at TIMESTAMP NULL,
    dismissed_at TIMESTAMP NULL,
    expires_at TIMESTAMP NULL, -- para notificações temporárias
    
    INDEX idx_status (status),
    INDEX idx_type (type),
    INDEX idx_severity (severity),
    INDEX idx_created_at (created_at),
    INDEX idx_user_company (user_id, company_id)
);

-- Tabela para configurações de notificações por usuário
CREATE TABLE IF NOT EXISTS fiscal_notification_settings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    
    -- Configurações por tipo de notificação
    nfce_rejection_enabled BOOLEAN DEFAULT TRUE,
    nfe_rejection_enabled BOOLEAN DEFAULT TRUE,
    cte_rejection_enabled BOOLEAN DEFAULT TRUE,
    sped_deadline_enabled BOOLEAN DEFAULT TRUE,
    cert_expiry_enabled BOOLEAN DEFAULT TRUE,
    general_alert_enabled BOOLEAN DEFAULT TRUE,
    
    -- Configurações de severidade mínima
    min_severity ENUM('low', 'medium', 'high', 'critical') DEFAULT 'medium',
    
    -- Canais de notificação
    email_enabled BOOLEAN DEFAULT FALSE,
    browser_enabled BOOLEAN DEFAULT TRUE,
    
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    UNIQUE KEY unique_user (user_id)
);

-- Inserir configurações padrão para usuários existentes
INSERT IGNORE INTO fiscal_notification_settings (user_id, min_severity, browser_enabled)
SELECT id, 'medium', TRUE FROM users WHERE active = 1;