<?php
session_start();
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}


date_default_timezone_set('America/Sao_Paulo');

function sanitizeHexColor($value, $default = '#06a3da')
{
    if (!is_string($value)) {
        return strtolower($default);
    }

    $value = trim($value);

    if (preg_match('/^#([a-fA-F0-9]{3}|[a-fA-F0-9]{6})$/', $value) !== 1) {
        return strtolower($default);
    }

    if (strlen($value) === 4) {
        return sprintf(
            '#%1$s%1$s%2$s%2$s%3$s%3$s',
            strtolower($value[1]),
            strtolower($value[2]),
            strtolower($value[3])
        );
    }

    return strtolower($value);
}

function hexToRgb($hex)
{
    $hex = str_replace('#', '', $hex);

    return [
        hexdec(substr($hex, 0, 2)),
        hexdec(substr($hex, 2, 2)),
        hexdec(substr($hex, 4, 2)),
    ];
}

function rgbToHsl($r, $g, $b)
{
    $r /= 255;
    $g /= 255;
    $b /= 255;

    $max = max($r, $g, $b);
    $min = min($r, $g, $b);
    $h = 0;
    $s = 0;
    $l = ($max + $min) / 2;

    if ($max !== $min) {
        $d = $max - $min;
        $s = $l > 0.5 ? $d / (2 - $max - $min) : $d / ($max + $min);

        switch ($max) {
            case $r:
                $h = ($g - $b) / $d + ($g < $b ? 6 : 0);
                break;
            case $g:
                $h = ($b - $r) / $d + 2;
                break;
            default:
                $h = ($r - $g) / $d + 4;
                break;
        }

        $h /= 6;
    }

    return [$h * 360, $s * 100, $l * 100];
}

function hslToHex($h, $s, $l)
{
    $s /= 100;
    $l /= 100;

    $c = (1 - abs(2 * $l - 1)) * $s;
    $x = $c * (1 - abs(fmod($h / 60, 2) - 1));
    $m = $l - $c / 2;

    if ($h < 60) {
        $r = $c;
        $g = $x;
        $b = 0;
    } elseif ($h < 120) {
        $r = $x;
        $g = $c;
        $b = 0;
    } elseif ($h < 180) {
        $r = 0;
        $g = $c;
        $b = $x;
    } elseif ($h < 240) {
        $r = 0;
        $g = $x;
        $b = $c;
    } elseif ($h < 300) {
        $r = $x;
        $g = 0;
        $b = $c;
    } else {
        $r = $c;
        $g = 0;
        $b = $x;
    }

    $r = (int) round(($r + $m) * 255);
    $g = (int) round(($g + $m) * 255);
    $b = (int) round(($b + $m) * 255);

    return sprintf('#%02x%02x%02x', $r, $g, $b);
}

function getLuminance($r, $g, $b) {
    return (0.299 * $r) + (0.587 * $g) + (0.114 * $b);
}

function adjustColorForContrast($textColorHex, $bgColorHex) {
    [$tr, $tg, $tb] = hexToRgb($textColorHex);
    [$br, $bg, $bb] = hexToRgb($bgColorHex);
    
    $bgLuminance = getLuminance($br, $bg, $bb);
    $textLuminance = getLuminance($tr, $tg, $tb);
    
    $isBgLight = $bgLuminance > 128;
    
    [$h, $s, $l] = rgbToHsl($tr, $tg, $tb);
    
    if ($isBgLight) {
        if ($textLuminance > 120) {
            $l = min($l, 35); 
        }
    } else {
        if ($textLuminance < 130) {
            $l = max($l, 75);
        }
    }
    
    return hslToHex($h, $s, $l);
}

function buildPalette($base)
{
    [$r, $g, $b] = hexToRgb($base);
    [$h, $s, $l] = rgbToHsl($r, $g, $b);

    $secondary = hslToHex(fmod($h + 30, 360), min($s + 8, 100), max($l - 5, 10));
    $light = hslToHex($h, max($s * 0.35, 12), min($l + 46, 96));
    $dark = hslToHex($h, min($s + 10, 100), max($l - 28, 12));

    $brightness = (0.299 * $r) + (0.587 * $g) + (0.114 * $b);
    $contrast = $brightness < 150 ? '#ffffff' : '#091e3e';
    $inverse = $brightness < 150 ? '#091e3e' : '#ffffff';

    return [
        'base'      => $base,
        'secondary' => $secondary,
        'light'     => $light,
        'dark'      => $dark,
        'cor1'      => $contrast,
        'cor2'      => $inverse,
        'bgcor'     => '#ffffff',
        'navbarcor' => '#ffffff',
        'fontprimary' => '#6c757d',
        'fontsecondary' => '#091e3e',
        'fonthighlight' => '#06a3da',
    ];
}

if (!function_exists('h')) {
    function h($v) { return htmlspecialchars($v ?? '', ENT_QUOTES, 'UTF-8'); }
}

require_once __DIR__ . '/../adm/config/db.php';
$dbThemeConfig = [];
$sql = "SELECT chave, valor FROM configuracoes WHERE chave IN ('seo_title', 'seo_description', 'seo_keywords', 'cor_primaria', 'cor_fundo', 'cor_navbar', 'cor_fonte_primaria', 'cor_fonte_secundaria', 'cor_fonte_destaque', 'cor_secundaria', 'cor_light', 'cor_dark', 'mostrar_foto_categoria', 'tipo_exibicao_produtos', 'titulo_todos_produtos', 'subtitulo_todos_produtos', 'cta_status', 'cta_titulo', 'cta_texto', 'cta_imagem', 'cta_btn1_texto', 'cta_btn1_link', 'cta_btn1_status', 'cta_btn2_texto', 'cta_btn2_link', 'cta_btn2_status', 'typewriter_status', 'typewriter_imagem', 'depoimentos_status', 'depoimentos_imagem', 'texto_topbar', 'qs_status', 'qs_titulo_topo', 'qs_titulo_principal', 'qs_subtitulo', 'qs_texto', 'qs_item1', 'qs_item2', 'qs_item3', 'qs_item4', 'qs_btn_texto', 'qs_imagens') OR chave LIKE 'status_secao_%'";
$resTheme = $conn->query($sql);
if ($resTheme && $resTheme->num_rows > 0) {
    while ($row = $resTheme->fetch_assoc()) {
        $dbThemeConfig[$row['chave']] = $row['valor'];
    }
}

$dadosLoja = [];
$sqlLoja = "SELECT * FROM dados_loja LIMIT 1";
$resLoja = $conn->query($sqlLoja);
if ($resLoja && $resLoja->num_rows > 0) {
    $dadosLoja = $resLoja->fetch_assoc();
}

$GLOBALS['dadosLoja'] = $dadosLoja;

// ── Verificação de colunas opcionais (rodada UMA vez por pageload) ────────────
// Componentes e páginas devem usar estas variáveis globais em vez de
// repetir SHOW COLUMNS em cada include/requisição AJAX.
$_chkCat  = $conn->query("SHOW COLUMNS FROM categorias LIKE 'posicao'");
$_chkProd = $conn->query("SHOW COLUMNS FROM produtos LIKE 'posicao'");
$GLOBALS['hasPosicaoCat']  = ($_chkCat  && $_chkCat->num_rows  > 0);
$GLOBALS['hasPosicaoProd'] = ($_chkProd && $_chkProd->num_rows > 0);
unset($_chkCat, $_chkProd);

// Default values se estiver vazio
$whatsappLoja = !empty($dadosLoja['whatsapp1']) ? preg_replace('/[^0-9]/', '', $dadosLoja['whatsapp1']) : '';
$whatsappDisplayLoja = !empty($dadosLoja['whatsapp1']) ? $dadosLoja['whatsapp1'] : 'WhatsApp da loja está indisponível';
$telefoneDisplayLoja = !empty($dadosLoja['telefone1']) ? $dadosLoja['telefone1'] : '(62) 9 9120-0167';
$emailDisplayLoja = !empty($dadosLoja['email1']) ? $dadosLoja['email1'] : 'ceo@catalogo44.com.br';
$instagramLoja = !empty($dadosLoja['instagram1']) ? $dadosLoja['instagram1'] : '#';
$facebookLoja = !empty($dadosLoja['facebook1']) ? $dadosLoja['facebook1'] : '#';
$enderecoLoja = !empty($dadosLoja['endereco']) ? $dadosLoja['endereco'] . ', ' . $dadosLoja['numero'] . ' - ' . $dadosLoja['cidade'] . '/' . $dadosLoja['estado'] : 'Goiânia - Goiás - Brasil';

// Arrays para todos os contatos (até 10 de cada)
$allTelefones = [];
$allWhatsapps = [];
$allEmails = [];
$allInstagrams = [];
$allFacebooks = [];
$youtubeLoja = '';

for ($i = 1; $i <= 10; $i++) {
    if (!empty($dadosLoja["telefone$i"])) $allTelefones[] = $dadosLoja["telefone$i"];
    if (!empty($dadosLoja["whatsapp$i"])) {
        $allWhatsapps[] = [
            'display' => $dadosLoja["whatsapp$i"],
            'link' => preg_replace('/[^0-9]/', '', $dadosLoja["whatsapp$i"])
        ];
    }
    if (!empty($dadosLoja["email$i"])) $allEmails[] = $dadosLoja["email$i"];
    if (!empty($dadosLoja["instagram$i"])) {
        $val = $dadosLoja["instagram$i"];
        $link = (strpos($val, 'http') === 0) ? $val : "https://instagram.com/" . ltrim($val, '@');
        $allInstagrams[] = ['display' => $val, 'link' => $link];
    }
    if (!empty($dadosLoja["facebook$i"])) {
        $val = $dadosLoja["facebook$i"];
        $link = (strpos($val, 'http') === 0) ? $val : "https://facebook.com/" . $val;
        $allFacebooks[] = ['display' => $val, 'link' => $link];
    }
}

// YouTube (single field)
if (!empty($dadosLoja['youtube'])) {
    $val = $dadosLoja['youtube'];
    $youtubeLoja = (strpos($val, 'http') === 0) ? $val : "https://youtube.com/" . (strpos($val, '@') === 0 ? $val : "@" . $val);
}

$GLOBALS['allTelefones'] = $allTelefones;
$GLOBALS['allWhatsapps'] = $allWhatsapps;
$GLOBALS['allEmails'] = $allEmails;
$GLOBALS['allInstagrams'] = $allInstagrams;
$GLOBALS['allFacebooks'] = $allFacebooks;
$GLOBALS['youtubeLoja'] = $youtubeLoja;



$baseColor = isset($dbThemeConfig['cor_primaria']) ? sanitizeHexColor($dbThemeConfig['cor_primaria']) : '#06a3da';
$themePalette = buildPalette($baseColor);

if (!empty($dbThemeConfig['cor_secundaria'])) {
    $themePalette['secondary'] = sanitizeHexColor($dbThemeConfig['cor_secundaria'], $themePalette['secondary']);
}
if (!empty($dbThemeConfig['cor_light'])) {
    $themePalette['light'] = sanitizeHexColor($dbThemeConfig['cor_light'], $themePalette['light']);
}
if (!empty($dbThemeConfig['cor_dark'])) {
    $themePalette['dark'] = sanitizeHexColor($dbThemeConfig['cor_dark'], $themePalette['dark']);
}

$themePalette['bgcor'] = isset($dbThemeConfig['cor_fundo']) ? sanitizeHexColor($dbThemeConfig['cor_fundo'], '#ffffff') : '#ffffff';
$themePalette['navbarcor'] = isset($dbThemeConfig['cor_navbar']) ? sanitizeHexColor($dbThemeConfig['cor_navbar'], '#ffffff') : '#ffffff';
$themePalette['fontprimary'] = isset($dbThemeConfig['cor_fonte_primaria']) ? sanitizeHexColor($dbThemeConfig['cor_fonte_primaria'], '#6c757d') : '#6c757d';
$themePalette['fontsecondary'] = isset($dbThemeConfig['cor_fonte_secundaria']) ? sanitizeHexColor($dbThemeConfig['cor_fonte_secundaria'], '#091e3e') : '#091e3e';
$themePalette['fonthighlight'] = isset($dbThemeConfig['cor_fonte_destaque']) ? sanitizeHexColor($dbThemeConfig['cor_fonte_destaque'], $baseColor) : $baseColor;

// Update session just to use same references everywhere (fallback)
$_SESSION['theme_palette'] = $themePalette;

// Atalhos de cor para uso direto nas páginas
$cor1      = $themePalette['cor1']      ?? '#ffffff';
$cor2      = $themePalette['cor2']      ?? '#091e3e';
$bgcor     = $themePalette['bgcor']     ?? '#ffffff';
$navbarcor = $themePalette['navbarcor'] ?? '#ffffff';
$fontprimary = $themePalette['fontprimary'] ?? '#6c757d';
$fontsecondary = $themePalette['fontsecondary'] ?? '#091e3e';
$fonthighlight = $themePalette['fonthighlight'] ?? '#06a3da';
$mostrarFotoCategoria = $dbThemeConfig['mostrar_foto_categoria'] ?? 'sim';

