<?php
/**
 * Field group « Sections de page » (group_cvb_sections).
 * Flexible content unique `sections` — 26 layouts, sur les 5 types de contenu.
 * GraphQL : post.sections { sections { ...layouts } } — les types des layouts
 * se terminent par {LayoutPascal}Layout (matching par suffixe côté front).
 *
 * UI : ACF Extended fournit la modale de sélection (recherche + vignettes +
 * catégories). Réglages `acfe_flexible_*` ci-dessous (admin-only, hors GraphQL).
 */

defined('ABSPATH') || exit;

/**
 * Catégorie ACFE par layout (clé = nom de fichier). Regroupe les blocks dans
 * la modale de sélection « Ajouter un block » pour s'y retrouver.
 */
function cvb_layout_categories(): array {
    return [
        'hero'                   => 'En-têtes',
        'barre-reassurance'      => 'Réassurance',
        'logos'                  => 'Réassurance',
        'certifications'         => 'Réassurance',
        'grille-cards'           => 'Grilles & listes',
        'grille-secteurs'        => 'Grilles & listes',
        'grille-solutions'       => 'Grilles & listes',
        'references-grille'      => 'Grilles & listes',
        'texte-image'            => 'Contenu',
        'faq'                    => 'Contenu',
        'contenu-seo'            => 'Contenu',
        'chiffres'               => 'Chiffres & preuves',
        'tableau-comparatif'     => 'Comparatifs',
        'tableau-situations'     => 'Comparatifs',
        'avant-apres'            => 'Comparatifs',
        'etapes'                 => 'Process',
        'timeline'               => 'Process',
        'cta'                    => 'Conversion',
        'temoignages-video'      => 'Témoignages & médias',
        'video'                  => 'Témoignages & médias',
        'citation'               => 'Témoignages & médias',
        'compatibilite-supports' => 'Produit',
        'specs-techniques'       => 'Produit',
        'variantes-produit'      => 'Produit',
        'fiche-chantier'         => 'Produit',
        'composant-react'        => 'Avancé',
        'benefices-mesurables'   => 'Réassurance',
        'preuve-chiffres'        => 'Réassurance',
        'cta-final-simple'       => 'Conversion',
        'cta-final-enrichi'      => 'Conversion',
        'expertise'              => 'Grilles & listes',
        'logos-presse'           => 'Réassurance',
        'avantages-produit'      => 'Produit',
        'constat'                => 'Contenu',
        'cool-roof-explainer'    => 'Contenu',
        'applicateurs'           => 'Conversion',
        'grille-frictions'       => 'Grilles & listes',
        'principe-cool-roof'     => 'Comparatifs',
        'systeme-couches'        => 'Process',
        'produit-showcase'       => 'Produit',
        'duel-comparatif'        => 'Comparatifs',
        'prime-cee'              => 'Comparatifs',
        'winter-objection'       => 'Contenu',
        'rse-section'            => 'Contenu',
        'product-hero'          => 'En-têtes',
        'industrie-hero'        => 'En-têtes',
        'secteur-hero'          => 'En-têtes',
        'local-hero'            => 'En-têtes',
        'roof-hero'             => 'En-têtes',
    ];
}

add_action('acf/init', 'cvb_register_sections_group');

function cvb_register_sections_group(): void {
    if (!function_exists('acf_add_local_field_group')) {
        return;
    }

    // 1 fichier par layout — chaque fichier retourne le tableau du layout.
    $files = [
        'hero', 'barre-reassurance', 'grille-cards', 'texte-image', 'chiffres',
        'tableau-comparatif', 'tableau-situations', 'etapes', 'faq', 'cta',
        'temoignages-video', 'video', 'logos', 'citation', 'contenu-seo',
        'compatibilite-supports', 'grille-secteurs', 'grille-solutions',
        'references-grille', 'timeline', 'composant-react', 'specs-techniques',
        'certifications', 'variantes-produit', 'avant-apres', 'fiche-chantier',
        // Designs bespoke exposés (cf. docs/blocks-audit.md)
        'benefices-mesurables',
        'preuve-chiffres', 'cta-final-simple', 'cta-final-enrichi', 'expertise',
        'logos-presse', 'avantages-produit',
        'constat', 'cool-roof-explainer', 'applicateurs', 'grille-frictions',
        'principe-cool-roof', 'systeme-couches',
        'produit-showcase', 'duel-comparatif', 'prime-cee',
        'winter-objection', 'rse-section',
        'product-hero', 'industrie-hero', 'secteur-hero', 'local-hero',
        'roof-hero',
    ];

    $categories = cvb_layout_categories();

    // Layouts disposant d'une vignette (capturée depuis le vrai rendu, cf.
    // scripts/block-thumbnails/capture.mjs → wp-content/uploads/block-thumbnails/).
    // ACFE accepte une URL directe dans acfe_flexible_thumbnail.
    $thumb_base   = trailingslashit(wp_upload_dir()['baseurl']) . 'block-thumbnails/';
    // Tous les layouts ont une vignette (fiche-chantier : capturée depuis une
    // vraie page reference, le bandeau infos chantier).
    $with_thumb   = [
        'fiche-chantier',
        'avant-apres', 'barre-reassurance', 'certifications', 'chiffres', 'citation',
        'compatibilite-supports', 'composant-react', 'contenu-seo', 'cta', 'etapes',
        'faq', 'grille-cards', 'grille-secteurs', 'grille-solutions', 'hero', 'logos',
        'references-grille', 'specs-techniques', 'tableau-comparatif', 'tableau-situations',
        'temoignages-video', 'texte-image', 'timeline', 'variantes-produit', 'video',
        'benefices-mesurables',
        'preuve-chiffres', 'cta-final-simple', 'cta-final-enrichi', 'expertise',
        'logos-presse', 'avantages-produit',
        'constat', 'cool-roof-explainer', 'applicateurs', 'grille-frictions',
        'principe-cool-roof', 'systeme-couches',
        'produit-showcase', 'duel-comparatif', 'prime-cee',
        'winter-objection', 'rse-section',
        'product-hero', 'industrie-hero', 'secteur-hero', 'local-hero',
        'roof-hero',
    ];

    $layouts = [];
    foreach ($files as $file) {
        $layout = require __DIR__ . '/layouts/' . $file . '.php';
        // Catégorie ACFE (modale de sélection). Réglage admin-only, ignoré par
        // ACF de base et par WPGraphQL.
        $layout['acfe_flexible_category'] = $categories[$file] ?? 'Autres';
        if (in_array($file, $with_thumb, true)) {
            $layout['acfe_flexible_thumbnail'] = $thumb_base . $file . '.jpg';
        }
        $layouts[$layout['key']] = $layout;
    }

    acf_add_local_field_group([
        'key'    => 'group_cvb_sections',
        'title'  => 'Sections de page',
        'fields' => [
            [
                'key'                => 'field_cvb_sections',
                'name'               => 'sections',
                'label'              => 'Sections',
                'type'               => 'flexible_content',
                'button_label'       => 'Ajouter un block',
                'show_in_graphql'    => 1,
                'graphql_field_name' => 'sections',
                'layouts'            => $layouts,
                // ── ACF Extended : modale de sélection visuelle ──────────────
                // Active les réglages par layout (catégorie, vignette).
                'acfe_flexible_advanced'           => 1,
                // Affiche les vignettes (acfe_flexible_thumbnail par layout).
                'acfe_flexible_layouts_thumbnails' => 1,
                // Modale de sélection « Ajouter un block » : recherche intégrée,
                // groupée par catégorie, 4 colonnes, plein écran. Les sous-clés
                // sont imbriquées sous le groupe acfe_flexible_modal (cf. ACFE
                // field-flexible-content-modal-select.php). enabled=true_false,
                // categories=select ('1' = activé).
                'acfe_flexible_modal' => [
                    'acfe_flexible_modal_enabled'    => 1,
                    'acfe_flexible_modal_title'      => 'Choisir un block',
                    'acfe_flexible_modal_size'       => 'full',
                    'acfe_flexible_modal_col'        => '4',
                    'acfe_flexible_modal_categories' => '1',
                ],
            ],
        ],
        'location' => [
            [['param' => 'post_type', 'operator' => '==', 'value' => 'page']],
            [['param' => 'post_type', 'operator' => '==', 'value' => 'produit']],
            [['param' => 'post_type', 'operator' => '==', 'value' => 'toiture']],
            [['param' => 'post_type', 'operator' => '==', 'value' => 'industrie']],
            [['param' => 'post_type', 'operator' => '==', 'value' => 'reference']],
        ],
        'position'           => 'normal',
        'menu_order'         => 0,
        'hide_on_screen'     => ['the_content'],
        'show_in_graphql'    => 1,
        'graphql_field_name' => 'sections',
    ]);
}
