<?php
if ( ! defined( 'ABSPATH' ) ) { exit; }

class Falcify_Admin {
    public static function init() {
        add_action( 'admin_menu', array( __CLASS__, 'menu' ) );
        add_action( 'admin_enqueue_scripts', array( __CLASS__, 'assets' ) );
        add_action( 'wp_ajax_falcify_dismiss_onboarding', array( __CLASS__, 'ajax_dismiss_onboarding' ) );
        // v2.7.12 — feuille de style injectée dans l'iframe TinyMCE pour
        // que les pictogrammes insérés manuellement s'affichent comme un
        // badge (et non comme « picto + texte du label »).
        add_filter( 'mce_css', array( __CLASS__, 'mce_css' ) );
    }

    public static function mce_css( $stylesheets ) {
        $url = FALCIFY_URL . 'assets/editor.css?v=' . FALCIFY_VERSION;
        if ( ! empty( $stylesheets ) ) $stylesheets .= ',';
        return $stylesheets . $url;
    }
    public static function menu() {
        add_menu_page(
            __( 'Falcify', 'falcify-connector' ),
            __( 'Falcify', 'falcify-connector' ),
            'manage_options',
            'falcify-connector',
            array( __CLASS__, 'render' ),
            'dashicons-universal-access-alt',
            58
        );
    }
    public static function assets( $hook ) {
        if ( strpos( $hook, 'falcify-connector' ) === false && ! in_array( $hook, array( 'post.php', 'post-new.php' ), true ) ) return;
        wp_enqueue_style( 'falcify-admin', FALCIFY_URL . 'assets/admin.css', array(), FALCIFY_VERSION );
        wp_enqueue_script( 'falcify-admin', FALCIFY_URL . 'assets/admin.js', array( 'jquery' ), FALCIFY_VERSION, true );
        // v2.7.10 — banque de pictogrammes pour insertion manuelle dans
        // l'éditeur FALC. On charge le manifeste officiel et on l'expose à JS.
        $pictos_manifest = array();
        $manifest_path   = FALCIFY_DIR . 'assets/pictos/manifest.php';
        if ( file_exists( $manifest_path ) ) {
            $pictos_manifest = (array) require $manifest_path;
        }
        wp_localize_script( 'falcify-admin', 'FALCIFY', array(
            'ajax'  => admin_url( 'admin-ajax.php' ),
            'nonce' => wp_create_nonce( 'falcify_admin' ),
            'pictosBaseUrl' => FALCIFY_URL . 'assets/pictos/',
            'pictos'        => array_values( array_map( function( $r ) {
                return array(
                    'file'  => isset( $r['file'] ) ? (string) $r['file'] : '',
                    'label' => isset( $r['label'] ) ? (string) $r['label'] : '',
                    'kw'    => isset( $r['kw'] ) ? array_values( (array) $r['kw'] ) : array(),
                );
            }, $pictos_manifest ) ),
            'i18n'  => array(
                'generating' => __( 'Génération en cours…', 'falcify-connector' ),
                'success'    => __( 'Version FALC générée.', 'falcify-connector' ),
                'error'      => __( 'Erreur', 'falcify-connector' ),
                'copied'     => __( 'Copié !', 'falcify-connector' ),
                'pickerTitle'  => __( 'Banque de pictogrammes', 'falcify-connector' ),
                'pickerSearch' => __( 'Rechercher un pictogramme…', 'falcify-connector' ),
                'pickerEmpty'  => __( 'Aucun pictogramme ne correspond.', 'falcify-connector' ),
                'pickerInsert' => __( 'Cliquez sur un pictogramme pour l\'insérer à l\'endroit du curseur.', 'falcify-connector' ),
                'pickerClose'  => __( 'Fermer', 'falcify-connector' ),
                'inserted'     => __( 'Pictogramme inséré.', 'falcify-connector' ),
                'noEditor'     => __( 'Placez le curseur dans l\'éditeur facile à lire avant d\'insérer un pictogramme.', 'falcify-connector' ),
            ),
        ) );
    }

    public static function ajax_dismiss_onboarding() {
        check_ajax_referer( 'falcify_admin', 'nonce' );
        if ( ! current_user_can( 'edit_posts' ) ) wp_send_json_error( 'forbidden', 403 );
        update_user_meta( get_current_user_id(), 'falcify_onboarding_done', 1 );
        wp_send_json_success();
    }

    public static function render() {
        // Tab navigation only — read-only display, no nonce required.
        // phpcs:ignore WordPress.Security.NonceVerification.Recommended
        $tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : 'overview';
        include FALCIFY_DIR . 'templates/admin-dashboard.php';
    }
}
