<?php
// admin/integraon-settings.php
$pageTitle = 'Configurações IntegraOn';
$pageHeader = 'Configurações IntegraOn';
$currentPage = 'integraon-settings';

// Define BASE_PATH se não estiver definido
if (!defined('BASE_PATH')) {
    define('BASE_PATH', dirname(dirname(__FILE__)));
}

require_once '../includes/config.php';
require_once '../includes/db.php';
require_once '../includes/functions.php';
require_once '../includes/auth.php';

// Requer autenticação
if (!$auth->isLoggedIn()) {
    redirect('admin/login.php');
    exit;
}

// Função para criar tabelas se não existirem
function createIntegrOnTables() {
    global $db;
    
    try {
        // Criar tabela system_settings se não existir
        if (!$db->tableExists('system_settings')) {
            $sql = "CREATE TABLE system_settings (
                id INT AUTO_INCREMENT PRIMARY KEY,
                setting_key VARCHAR(100) UNIQUE NOT NULL,
                setting_value TEXT,
                setting_type ENUM('string', 'number', 'boolean', 'json') DEFAULT 'string',
                description VARCHAR(255),
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                INDEX idx_setting_key (setting_key)
            )";
            $db->query($sql);
            $db->execute();
        }
        
        // Criar tabela integraon_sync_log se não existir
        if (!$db->tableExists('integraon_sync_log')) {
            $sql = "CREATE TABLE integraon_sync_log (
                id INT AUTO_INCREMENT PRIMARY KEY,
                sync_date DATETIME NOT NULL,
                start_date DATE NOT NULL,
                end_date DATE NOT NULL,
                status ENUM('success', 'error') NOT NULL,
                error_message TEXT,
                records_synced INT DEFAULT 0,
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                INDEX idx_sync_date (sync_date),
                INDEX idx_status (status)
            )";
            $db->query($sql);
            $db->execute();
        }
        
        return true;
    } catch (Exception $e) {
        logError("Erro ao criar tabelas IntegraOn: " . $e->getMessage());
        return false;
    }
}

// Criar tabelas se necessário
createIntegrOnTables();

// Processar formulário de configuração
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_config'])) {
    try {
        $accessToken = trim($_POST['access_token']);
        $password = trim($_POST['password']);
        $autoSync = isset($_POST['auto_sync']) ? '1' : '0';
        $syncInterval = intval($_POST['sync_interval']);
        
        // Validações
        if (empty($accessToken)) {
            throw new Exception('Access Token é obrigatório');
        }
        
        if (empty($password)) {
            throw new Exception('Senha é obrigatória');
        }
        
        // Função para salvar configuração
        function saveSetting($key, $value, $description = '') {
            global $db;
            
            $db->query("INSERT INTO system_settings (setting_key, setting_value, description, updated_at) 
                       VALUES (:key, :value, :description, NOW())
                       ON DUPLICATE KEY UPDATE setting_value = :value, updated_at = NOW()");
            $db->bind(':key', $key);
            $db->bind(':value', $value);
            $db->bind(':description', $description);
            $db->execute();
        }
        
        // Salvar configurações
        saveSetting('integraon_access_token', $accessToken, 'Token de acesso da API IntegraOn');
        saveSetting('integraon_password', $password, 'Senha da API IntegraOn');
        saveSetting('integraon_auto_sync', $autoSync, 'Sincronização automática habilitada');
        saveSetting('integraon_sync_interval', $syncInterval, 'Intervalo de sincronização em minutos');
        
        logInfo("Configurações IntegraOn atualizadas por " . ($_SESSION['admin_name'] ?? 'usuário'));
        setAlert('Configurações salvas com sucesso!', ALERT_SUCCESS);
        
    } catch (Exception $e) {
        logError("Erro ao salvar configurações IntegraOn: " . $e->getMessage());
        setAlert('Erro ao salvar configurações: ' . $e->getMessage(), ALERT_ERROR);
    }
}

// Testar conexão
if (isset($_POST['test_connection'])) {
    try {
        $accessToken = trim($_POST['access_token']);
        $password = trim($_POST['password']);
        
        if (empty($accessToken) || empty($password)) {
            throw new Exception('Preencha o Access Token e a Senha para testar a conexão');
        }
        
        // Inclui a classe IntegraOn se existir
        if (file_exists('../includes/integraon-revenue.php')) {
            require_once '../includes/integraon-revenue.php';
            $integraOnRevenue = new IntegraOnRevenueAPI($db);
            $integraOnRevenue->setCredentials($accessToken, $password);
            
            // Testa fazendo uma requisição simples
            $testDate = date('Y-m-d');
            $testResult = $integraOnRevenue->getRevenueSummary($testDate, $testDate);
            
            setAlert('Conexão testada com sucesso! API respondeu corretamente.', ALERT_SUCCESS);
            logInfo("Teste de conexão IntegraOn realizado com sucesso");
        } else {
            throw new Exception('Arquivo da API IntegraOn não encontrado');
        }
        
    } catch (Exception $e) {
        logError("Erro no teste de conexão IntegraOn: " . $e->getMessage());
        setAlert('Erro na conexão: ' . $e->getMessage(), ALERT_ERROR);
    }
}

// Sincronização manual
if (isset($_POST['manual_sync'])) {
    try {
        if (file_exists('../includes/integraon-revenue.php')) {
            require_once '../includes/integraon-revenue.php';
            $integraOnRevenue = new IntegraOnRevenueAPI($db);
            
            // Período dos últimos 7 dias
            $startDate = date('Y-m-d', strtotime('-7 days'));
            $endDate = date('Y-m-d');
            
            $integraOnRevenue->syncData($startDate, $endDate);
            
            setAlert("Sincronização manual executada com sucesso! Período: $startDate a $endDate", ALERT_SUCCESS);
            logInfo("Sincronização manual IntegraOn executada para período: $startDate a $endDate");
        } else {
            throw new Exception('Arquivo da API IntegraOn não encontrado');
        }
        
    } catch (Exception $e) {
        logError("Erro na sincronização manual: " . $e->getMessage());
        setAlert('Erro na sincronização: ' . $e->getMessage(), ALERT_ERROR);
    }
}

// Função para carregar configurações
function getSetting($key, $default = '') {
    global $db;
    try {
        $db->query("SELECT setting_value FROM system_settings WHERE setting_key = :key");
        $db->bind(':key', $key);
        $result = $db->single();
        return $result ? $result['setting_value'] : $default;
    } catch (Exception $e) {
        return $default;
    }
}

// Carregar configurações atuais
$currentAccessToken = getSetting('integraon_access_token');
$currentPassword = getSetting('integraon_password');
$autoSync = getSetting('integraon_auto_sync', '0');
$syncInterval = getSetting('integraon_sync_interval', '60');

// Verificar último status de sincronização
try {
    $db->query("SELECT * FROM integraon_sync_log ORDER BY sync_date DESC LIMIT 5");
    $syncHistory = $db->resultSet();
} catch (Exception $e) {
    $syncHistory = [];
}

// Verificar estatísticas gerais
$totalConversions = 0;
$totalRevenue = 0;
try {
    if ($db->tableExists('integraon_conversions')) {
        $db->query("SELECT 
            COUNT(*) as total_conversions,
            SUM(commission_value) as total_revenue
            FROM integraon_conversions 
            WHERE conversion_date >= DATE_SUB(NOW(), INTERVAL 30 DAY)");
        $stats = $db->single();
        $totalConversions = $stats['total_conversions'] ?? 0;
        $totalRevenue = $stats['total_revenue'] ?? 0;
    }
} catch (Exception $e) {
    // Ignora erro se tabela não existir
}

require_once 'inc/header.php';
?>

<div class="container-fluid px-4">
    <!-- Cabeçalho -->
    <div class="row mb-4">
        <div class="col-12">
            <div class="card border-0 shadow-sm">
                <div class="card-body">
                    <div class="d-flex justify-content-between align-items-center">
                        <div>
                            <h1 class="h3 mb-1"><?php echo $pageHeader; ?></h1>
                            <p class="text-muted mb-0">Configure a integração com a API da IntegraOn para monitoramento de receita</p>
                        </div>
                        <div>
                            <a href="revenue.php" class="btn btn-outline-primary">
                                <i class="fas fa-chart-line me-2"></i>Ver Relatórios
                            </a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Alertas -->
    <?php if ($alert = getAlert()): ?>
    <div class="row mb-4">
        <div class="col-12">
            <div class="alert alert-<?php echo $alert['type']; ?> alert-dismissible fade show" role="alert">
                <?php echo $alert['message']; ?>
                <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
            </div>
        </div>
    </div>
    <?php endif; ?>

    <!-- Estatísticas Rápidas -->
    <div class="row mb-4">
        <div class="col-md-3">
            <div class="card border-0 shadow-sm">
                <div class="card-body text-center">
                    <h3 class="text-primary"><?php echo number_format($totalConversions); ?></h3>
                    <p class="text-muted mb-0">Conversões (30 dias)</p>
                </div>
            </div>
        </div>
        <div class="col-md-3">
            <div class="card border-0 shadow-sm">
                <div class="card-body text-center">
                    <h3 class="text-success">R$ <?php echo number_format($totalRevenue, 2, ',', '.'); ?></h3>
                    <p class="text-muted mb-0">Receita (30 dias)</p>
                </div>
            </div>
        </div>
        <div class="col-md-3">
            <div class="card border-0 shadow-sm">
                <div class="card-body text-center">
                    <h3 class="<?php echo !empty($currentAccessToken) ? 'text-success' : 'text-warning'; ?>">
                        <i class="fas <?php echo !empty($currentAccessToken) ? 'fa-check-circle' : 'fa-exclamation-triangle'; ?>"></i>
                    </h3>
                    <p class="text-muted mb-0">Status API</p>
                </div>
            </div>
        </div>
        <div class="col-md-3">
            <div class="card border-0 shadow-sm">
                <div class="card-body text-center">
                    <h3 class="<?php echo $autoSync == '1' ? 'text-info' : 'text-muted'; ?>">
                        <i class="fas <?php echo $autoSync == '1' ? 'fa-sync-alt' : 'fa-pause'; ?>"></i>
                    </h3>
                    <p class="text-muted mb-0">Auto Sync</p>
                </div>
            </div>
        </div>
    </div>

    <div class="row">
        <!-- Configurações -->
        <div class="col-md-8">
            <div class="card border-0 shadow-sm">
                <div class="card-header bg-white">
                    <h5 class="mb-0"><i class="fas fa-cog me-2"></i>Credenciais da API</h5>
                </div>
                <div class="card-body">
                    <form method="POST" id="configForm">
                        <div class="row">
                            <div class="col-md-6">
                                <div class="mb-3">
                                    <label class="form-label">Access Token <span class="text-danger">*</span></label>
                                    <input type="text" class="form-control" name="access_token" 
                                           value="<?php echo htmlspecialchars($currentAccessToken); ?>" required>
                                    <div class="form-text">Token de acesso fornecido pela IntegraOn</div>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="mb-3">
                                    <label class="form-label">Senha <span class="text-danger">*</span></label>
                                    <input type="password" class="form-control" name="password" 
                                           value="<?php echo htmlspecialchars($currentPassword); ?>" required>
                                    <div class="form-text">Senha da sua conta IntegraOn</div>
                                </div>
                            </div>
                        </div>
                        
                        <div class="row">
                            <div class="col-md-6">
                                <div class="mb-3">
                                    <div class="form-check form-switch">
                                        <input class="form-check-input" type="checkbox" name="auto_sync" 
                                               id="auto_sync" <?php echo $autoSync == '1' ? 'checked' : ''; ?>>
                                        <label class="form-check-label" for="auto_sync">
                                            Sincronização Automática
                                        </label>
                                    </div>
                                    <div class="form-text">Sincronizar dados automaticamente em intervalos regulares</div>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="mb-3">
                                    <label class="form-label">Intervalo de Sincronização</label>
                                    <select class="form-select" name="sync_interval">
                                        <option value="30" <?php echo $syncInterval == '30' ? 'selected' : ''; ?>>30 minutos</option>
                                        <option value="60" <?php echo $syncInterval == '60' ? 'selected' : ''; ?>>1 hora</option>
                                        <option value="120" <?php echo $syncInterval == '120' ? 'selected' : ''; ?>>2 horas</option>
                                        <option value="360" <?php echo $syncInterval == '360' ? 'selected' : ''; ?>>6 horas</option>
                                        <option value="720" <?php echo $syncInterval == '720' ? 'selected' : ''; ?>>12 horas</option>
                                        <option value="1440" <?php echo $syncInterval == '1440' ? 'selected' : ''; ?>>24 horas</option>
                                    </select>
                                </div>
                            </div>
                        </div>
                        
                        <div class="d-flex flex-wrap gap-2">
                            <button type="submit" name="save_config" class="btn btn-primary">
                                <i class="fas fa-save me-1"></i>Salvar Configurações
                            </button>
                            <button type="submit" name="test_connection" class="btn btn-outline-success">
                                <i class="fas fa-plug me-1"></i>Testar Conexão
                            </button>
                            <button type="submit" name="manual_sync" class="btn btn-outline-info">
                                <i class="fas fa-sync-alt me-1"></i>Sincronizar Agora
                            </button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
        
        <!-- Status e Histórico -->
        <div class="col-md-4">
            <div class="card border-0 shadow-sm">
                <div class="card-header bg-white">
                    <h5 class="mb-0"><i class="fas fa-history me-2"></i>Histórico de Sincronização</h5>
                </div>
                <div class="card-body">
                    <div class="sync-status">
                        <?php if (!empty($syncHistory)): ?>
                            <?php foreach ($syncHistory as $sync): ?>
                            <div class="sync-item">
                                <div class="d-flex justify-content-between align-items-center">
                                    <div>
                                        <div class="sync-date">
                                            <?php echo date('d/m/Y H:i', strtotime($sync['sync_date'])); ?>
                                        </div>
                                        <div class="sync-period">
                                            <?php echo date('d/m', strtotime($sync['start_date'])); ?> - 
                                            <?php echo date('d/m', strtotime($sync['end_date'])); ?>
                                            <?php if (isset($sync['records_synced']) && $sync['records_synced'] > 0): ?>
                                                <small>(<?php echo $sync['records_synced']; ?> registros)</small>
                                            <?php endif; ?>
                                        </div>
                                    </div>
                                    <div class="sync-result">
                                        <?php if ($sync['status'] === 'success'): ?>
                                            <span class="badge bg-success">Sucesso</span>
                                        <?php else: ?>
                                            <span class="badge bg-danger" 
                                                  title="<?php echo htmlspecialchars($sync['error_message']); ?>"
                                                  data-bs-toggle="tooltip">Erro</span>
                                        <?php endif; ?>
                                    </div>
                                </div>
                            </div>
                            <?php endforeach; ?>
                        <?php else: ?>
                            <div class="text-center py-3">
                                <i class="fas fa-clock fa-2x text-muted mb-2"></i>
                                <p class="text-muted mb-0">Nenhuma sincronização realizada ainda.</p>
                            </div>
                        <?php endif; ?>
                    </div>
                </div>
            </div>
            
            <!-- Documentação -->
            <div class="card border-0 shadow-sm mt-3">
                <div class="card-header bg-white">
                    <h5 class="mb-0"><i class="fas fa-book me-2"></i>Documentação</h5>
                </div>
                <div class="card-body">
                    <div class="doc-links">
                        <div class="doc-link">
                            <i class="fas fa-info-circle me-2"></i>
                            <div>
                                <strong>Como Configurar</strong>
                                <div class="text-muted small">
                                    1. Obtenha suas credenciais na IntegraOn<br>
                                    2. Preencha o Access Token e Senha<br>
                                    3. Teste a conexão<br>
                                    4. Configure a sincronização automática
                                </div>
                            </div>
                        </div>
                        
                        <div class="doc-link">
                            <i class="fas fa-exclamation-triangle me-2 text-warning"></i>
                            <div>
                                <strong>Problemas Comuns</strong>
                                <div class="text-muted small">
                                    • Verifique se as credenciais estão corretas<br>
                                    • Certifique-se de que a API está ativa<br>
                                    • Confira os logs de erro
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- Estilos customizados -->
<style>
    .sync-status {
        max-height: 300px;
        overflow-y: auto;
    }
    
    .sync-item {
        padding: 0.75rem 0;
        border-bottom: 1px solid #E5E7EB;
        font-size: 0.875rem;
    }
    
    .sync-item:last-child {
        border-bottom: none;
    }
    
    .sync-date {
        font-weight: 600;
        color: #4F46E5;
    }
    
    .sync-period {
        color: #6B7280;
        font-size: 0.8rem;
    }
    
    .doc-links {
        display: flex;
        flex-direction: column;
        gap: 1rem;
    }
    
    .doc-link {
        display: flex;
        align-items: flex-start;
        padding: 1rem;
        background: #F8FAFC;
        border-radius: 8px;
        border-left: 3px solid #4F46E5;
    }
    
    .card {
        transition: all 0.3s ease;
    }
    
    .card:hover {
        transform: translateY(-2px);
        box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1) !important;
    }
</style>

<!-- Scripts -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // Inicializar tooltips
    const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
    const tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
        return new bootstrap.Tooltip(tooltipTriggerEl);
    });
    
    // Validação do formulário
    const form = document.getElementById('configForm');
    if (form) {
        form.addEventListener('submit', function(e) {
            const accessToken = form.querySelector('[name="access_token"]').value.trim();
            const password = form.querySelector('[name="password"]').value.trim();
            
            if (!accessToken || !password) {
                e.preventDefault();
                alert('Por favor, preencha o Access Token e a Senha.');
                return false;
            }
        });
    }
    
    // Auto-refresh da página a cada 5 minutos se auto sync estiver ativo
    <?php if ($autoSync == '1'): ?>
    setTimeout(function() {
        window.location.reload();
    }, 300000); // 5 minutos
    <?php endif; ?>
});
</script>

<?php require_once 'inc/footer.php'; ?>