<?php
/**
 * MontaLoja - Theme Helper
 * Funções auxiliares para gerenciar o tema do template modern
 * 
 * Inclua este arquivo no início das páginas para ter acesso às funções de tema
 */

// Definir constante do diretório do template
if (!defined('MODERN_TEMPLATE_DIR')) {
    define('MODERN_TEMPLATE_DIR', dirname(__DIR__));
}

if (!defined('MODERN_ASSETS_DIR')) {
    define('MODERN_ASSETS_DIR', MODERN_TEMPLATE_DIR . '/assets');
}

/**
 * Retorna o caminho relativo para os assets do template
 * @param string $path Caminho do asset
 * @return string URL do asset
 */
function themeAsset($path) {
    // Sempre usar caminho absoluto — funciona em subdomínio, /loja/ e qualquer domínio
    return '/pages/storefront/templates/retail/modern/assets/' . ltrim($path, '/');
}

/**
 * Gera a tag link para o CSS do tema
 * @return string Tag HTML link
 */
function themeStylesheet() {
    return '<link rel="stylesheet" href="' . themeAsset('css/theme.css') . '">';
}

/**
 * Gera o bloco de variáveis CSS dinâmicas
 * @param array $store Array com dados da loja
 * @return string Tag HTML style com as variáveis
 */
function themeVariables($store) {
    // Extrair cores do array da loja
    $primary = $store['primary_color'] ?? $store['cor_primaria'] ?? '#2563EB';
    $accent = $store['accent_color'] ?? $store['cor_destaque'] ?? '#10B981';
    $bg = $store['bg_color'] ?? $store['cor_fundo'] ?? '#FAFBFC';
    $text = $store['text_color'] ?? $store['cor_texto'] ?? '#111827';
    $surface = $store['surface_color'] ?? '#FFFFFF';
    $border = $store['border_color'] ?? '#E5E7EB';
    
    // Converter hex para RGB
    $primaryRgb = hexToRgbValues($primary);
    $accentRgb = hexToRgbValues($accent);
    $textRgb = hexToRgbValues($text);
    
    // Gerar variações
    $primaryHover = adjustColorBrightness($primary, -15);
    $primaryLight = adjustColorBrightness($primary, 85);
    $primaryDark = adjustColorBrightness($primary, -25);
    
    $accentHover = adjustColorBrightness($accent, -15);
    $accentLight = adjustColorBrightness($accent, 85);
    
    return <<<CSS
<style>
:root {
    --primary: {$primary};
    --primary-rgb: {$primaryRgb};
    --primary-soft: rgba({$primaryRgb}, 0.08);
    --primary-hover: {$primaryHover};
    --primary-light: {$primaryLight};
    --primary-dark: {$primaryDark};
    
    --accent: {$accentHover};
    --accent-rgb: {$accentRgb};
    --accent-soft: rgba({$accentRgb}, 0.1);
    --accent-hover: {$accentHover};
    --accent-light: {$accentLight};
    
    --bg: {$bg};
    --bg-card: {$surface};
    --surface: {$surface};
    
    --text: {$text};
    --text-rgb: {$textRgb};
    
    --border: {$border};
}
</style>
CSS;
}

/**
 * Gera o cabeçalho HTML completo com o tema
 * @param array $store Array com dados da loja
 * @param string $pageTitle Título da página
 * @param array $extraMeta Metas adicionais
 * @return string HTML do head
 */
function themeHead($store, $pageTitle = '', $extraMeta = []) {
    $storeName = htmlspecialchars($store['nome'] ?? $store['name'] ?? 'Loja');
    $title = $pageTitle ? "{$pageTitle} | {$storeName}" : $storeName;
    $description = htmlspecialchars($store['descricao'] ?? $store['description'] ?? '');
    $favicon = $store['favicon'] ?? $store['logo'] ?? '';
    
    $html = <<<HTML
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{$title}</title>
<meta name="description" content="{$description}">

HTML;

    // Favicon
    if ($favicon) {
        $html .= '<link rel="icon" href="' . htmlspecialchars($favicon) . '">' . "\n";
    }
    
    // Google Fonts
    $html .= '<link rel="preconnect" href="https://fonts.googleapis.com">' . "\n";
    $html .= '<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>' . "\n";
    $html .= '<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">' . "\n";
    
    // Theme CSS
    $html .= themeStylesheet() . "\n";
    
    // Dynamic Variables
    $html .= themeVariables($store) . "\n";
    
    // Metas extras
    foreach ($extraMeta as $meta) {
        $html .= $meta . "\n";
    }
    
    return $html;
}

/**
 * Converte cor hexadecimal para valores RGB
 * @param string $hex Cor em formato hex
 * @return string Valores RGB separados por vírgula
 */
function hexToRgbValues($hex) {
    $hex = ltrim($hex, '#');
    
    if (strlen($hex) === 3) {
        $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2];
    }
    
    $r = hexdec(substr($hex, 0, 2));
    $g = hexdec(substr($hex, 2, 2));
    $b = hexdec(substr($hex, 4, 2));
    
    return "{$r}, {$g}, {$b}";
}

/**
 * Ajusta o brilho de uma cor
 * @param string $hex Cor em formato hex
 * @param int $percent Percentual de ajuste (-100 a 100)
 * @return string Cor ajustada em formato hex
 */
function adjustColorBrightness($hex, $percent) {
    $hex = ltrim($hex, '#');
    
    $r = hexdec(substr($hex, 0, 2));
    $g = hexdec(substr($hex, 2, 2));
    $b = hexdec(substr($hex, 4, 2));
    
    $factor = $percent / 100;
    
    if ($factor > 0) {
        // Clarear
        $r = min(255, round($r + (255 - $r) * $factor));
        $g = min(255, round($g + (255 - $g) * $factor));
        $b = min(255, round($b + (255 - $b) * $factor));
    } else {
        // Escurecer
        $factor = abs($factor);
        $r = max(0, round($r * (1 - $factor)));
        $g = max(0, round($g * (1 - $factor)));
        $b = max(0, round($b * (1 - $factor)));
    }
    
    return sprintf('#%02X%02X%02X', $r, $g, $b);
}

/**
 * Verifica se a cor é escura (para determinar cor de texto contrastante)
 * @param string $hex Cor em formato hex
 * @return bool True se a cor for escura
 */
function isColorDark($hex) {
    $hex = ltrim($hex, '#');
    
    $r = hexdec(substr($hex, 0, 2));
    $g = hexdec(substr($hex, 2, 2));
    $b = hexdec(substr($hex, 4, 2));
    
    // Fórmula de luminância relativa
    $luminance = (0.299 * $r + 0.587 * $g + 0.114 * $b) / 255;
    
    return $luminance < 0.5;
}

/**
 * Retorna a cor de texto ideal para um fundo
 * @param string $bgColor Cor de fundo em hex
 * @return string Cor de texto (#FFFFFF ou #111827)
 */
function getContrastTextColor($bgColor) {
    return isColorDark($bgColor) ? '#FFFFFF' : '#111827';
}
