<?php
/**
 * Settings Helper - Sistema de Configurações White Label
 * 
 * Este helper gerencia todas as configurações de customização do sistema
 * sem interferir nas funcionalidades existentes.
 * 
 * @version 1.0
 * @author Checkout Pro 2025
 */

if (!function_exists('getSystemSetting')) {
    /**
     * Obtém uma configuração do sistema
     * 
     * @param string $key Chave da configuração
     * @param mixed $default Valor padrão se não encontrar
     * @return mixed Valor da configuração ou default
     */
    function getSystemSetting($key, $default = null) {
        global $pdo;
        
        // Verificar cache de sessão primeiro (performance)
        $cache_key = 'system_setting_' . $key;
        if (isset($_SESSION[$cache_key])) {
            return $_SESSION[$cache_key];
        }
        
        if (!isset($pdo)) {
            return $default;
        }
        
        try {
            $stmt = $pdo->prepare("SELECT setting_value FROM system_settings WHERE setting_key = ? LIMIT 1");
            $stmt->execute([$key]);
            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            
            $value = $result ? $result['setting_value'] : $default;
            
            // Cachear na sessão
            $_SESSION[$cache_key] = $value;
            
            return $value;
        } catch (PDOException $e) {
            error_log("Erro ao buscar configuração {$key}: " . $e->getMessage());
            return $default;
        }
    }
}

if (!function_exists('setSystemSetting')) {
    /**
     * Define uma configuração do sistema
     * 
     * @param string $key Chave da configuração
     * @param mixed $value Valor da configuração
     * @param string $type Tipo da configuração (color, image, text, etc.)
     * @return bool Sucesso da operação
     */
    function setSystemSetting($key, $value, $type = 'text') {
        global $pdo;
        
        if (!isset($pdo)) {
            return false;
        }
        
        try {
            $stmt = $pdo->prepare("
                INSERT INTO system_settings (setting_key, setting_value, setting_type) 
                VALUES (?, ?, ?)
                ON DUPLICATE KEY UPDATE 
                    setting_value = VALUES(setting_value),
                    setting_type = VALUES(setting_type),
                    updated_at = CURRENT_TIMESTAMP
            ");
            
            $result = $stmt->execute([$key, $value, $type]);
            
            // Limpar cache da sessão
            $cache_key = 'system_setting_' . $key;
            unset($_SESSION[$cache_key]);
            
            return $result;
        } catch (PDOException $e) {
            error_log("Erro ao salvar configuração {$key}: " . $e->getMessage());
            return false;
        }
    }
}

if (!function_exists('getAllSystemSettings')) {
    /**
     * Obtém todas as configurações do sistema
     * 
     * @return array Array associativo com todas as configurações
     */
    function getAllSystemSettings() {
        global $pdo;
        
        if (!isset($pdo)) {
            return [];
        }
        
        try {
            $stmt = $pdo->query("SELECT setting_key, setting_value, setting_type FROM system_settings");
            $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
            
            $settings = [];
            foreach ($results as $row) {
                $settings[$row['setting_key']] = [
                    'value' => $row['setting_value'],
                    'type' => $row['setting_type']
                ];
            }
            
            return $settings;
        } catch (PDOException $e) {
            error_log("Erro ao buscar todas as configurações: " . $e->getMessage());
            return [];
        }
    }
}

if (!function_exists('clearSettingsCache')) {
    /**
     * Limpa o cache de configurações da sessão
     */
    function clearSettingsCache() {
        foreach ($_SESSION as $key => $value) {
            if (strpos($key, 'system_setting_') === 0) {
                unset($_SESSION[$key]);
            }
        }
    }
}

if (!function_exists('getDynamicCSS')) {
    /**
     * Gera CSS dinâmico baseado nas configurações
     * 
     * @return string CSS customizado
     */
    function getDynamicCSS() {
        // Este CSS é gerado mas não é usado diretamente
        // As cores são aplicadas via load_settings.php que sobrescreve as variáveis CSS
        $css = '<style id="white-label-css">';
        $css .= '/* Cores customizadas são aplicadas via load_settings.php */';
        $css .= '</style>';
        
        return $css;
    }
}

