<?php
// app/custom_menus.php
// Lê menus customizados do banco e disponibiliza pra renderização no sidebar.

require_once __DIR__ . '/db.php';
require_once __DIR__ . '/custom_menus_icons.php';

/**
 * Retorna todos os menus customizados ativos agrupados por posição.
 *
 * Resultado: ['top' => [...], 'after_painel' => [...], 'end' => [...]]
 * Cada item tem: id, label, icon, url, position, sort_order
 */
function custom_menus_get_by_position(): array {
    static $cache = null;
    if ($cache !== null) return $cache;

    try {
        $pdo = db();
        $stmt = $pdo->prepare("
            SELECT id, label, icon, url, position, sort_order
            FROM public.custom_menus
            WHERE active = true
            ORDER BY position, sort_order, created_at
        ");
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    } catch (Throwable $e) {
        $cache = [];
        return $cache;
    }

    $grouped = [];
    foreach ($rows as $r) {
        $pos = $r['position'] ?? 'end';
        if (!isset($grouped[$pos])) $grouped[$pos] = [];
        $grouped[$pos][] = $r;
    }
    $cache = $grouped;
    return $cache;
}

/**
 * Renderiza os menus customizados de uma posição específica como HTML.
 * Cada menu vira um <a> com classe sb-link, ícone SVG, label e indicador de link externo.
 */
function custom_menus_render_position(string $position): string {
    $byPos = custom_menus_get_by_position();
    if (empty($byPos[$position])) return '';

    $out = '';
    foreach ($byPos[$position] as $m) {
        $label = htmlspecialchars($m['label'], ENT_QUOTES, 'UTF-8');
        $url   = htmlspecialchars($m['url'], ENT_QUOTES, 'UTF-8');
        $icon  = custom_menus_render_icon($m['icon'] ?? 'link', 18);

        $out .= '<a class="sb-link" href="' . $url . '" target="_blank" rel="noopener noreferrer" data-custom-menu="1">';
        $out .= $icon;
        $out .= '<span class="sb-link-text">' . $label . '</span>';
        // Ícone de "abre em nova aba"
        $out .= '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" style="margin-left:auto;opacity:.6">';
        $out .= '<path d="M18 3h3v3M21 3l-7 7"/><rect x="3" y="3" width="14" height="14" rx="2"/>';
        $out .= '</svg>';
        $out .= '</a>';
    }
    return $out;
}
