<?php
/**
 * PufferGo Design Switcher
 *
 * 在管理员登录后的所有页面（前台 + 后台）右侧注入
 * 品牌设计方案切换浮层（React bundle）。
 *
 * 职责：
 *  1. wp_footer / admin_footer：向 DOM 注入挂载节点 <div id="puffergo-design-switcher-root">
 *  2. wp_enqueue_scripts / admin_enqueue_scripts：加载 JS bundle 并传 nonce
 *
 * @package PufferGo_Core
 * @since 2.2.0
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

class PufferGo_Design_Switcher {

    const HANDLE            = 'puffergo-design-switcher';
    const VERSION           = PUFFERGO_CORE_VERSION;
    const AI_BUILDER_SCREEN = 'puffergo_page_puffergo-ai-site-builder';

    public function __construct() {
        // 仅对已登录管理员生效
        add_action( 'init', array( $this, 'maybe_register_hooks' ) );
    }

    /**
     * 检查当前用户权限后再注册 hooks，避免在未登录请求中初始化
     */
    public function maybe_register_hooks() {
        if ( ! is_user_logged_in() || ! current_user_can( 'edit_posts' ) ) {
            return;
        }

        // 资源加载：前台 + 后台分别使用对应 hook
        add_action( 'wp_enqueue_scripts',    array( $this, 'enqueue_assets' ) );
        add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );

        // 挂载节点：注入到页面底部
        add_action( 'wp_footer',    array( $this, 'render_mount_node' ) );
        add_action( 'admin_footer', array( $this, 'render_mount_node' ) );
    }

    /**
     * 检查当前后台页面是否应跳过浮层注入。
     *
     * 块编辑器（post/post-new）已由 PufferGo Tool 侧边栏内嵌，
     * AI 整站构建器（Step4）自带浮动入口，均不需要全局浮层。
     *
     * @return bool true = 跳过
     */
    private function should_skip() {
        if ( ! is_admin() ) {
            return false;
        }
        $screen = get_current_screen();
        return $screen && (
            in_array( $screen->base, array( 'post', 'post-new' ), true ) ||
            self::AI_BUILDER_SCREEN === $screen->id
        );
    }

    /**
     * 当前前台请求是否为使用 puffergo-fullpage.php 的 singular 页面。
     * 设计切换器仅在此时显示 Header/Footer 浮层按钮（与插件页眉页脚一致）。
     *
     * @return bool
     */
    private function is_current_view_puffergo_fullpage() {
        if ( is_admin() ) {
            return false;
        }
        if ( ! is_singular() ) {
            return false;
        }
        $post_id = (int) get_queried_object_id();
        if ( $post_id < 1 ) {
            return false;
        }
        $template = get_page_template_slug( $post_id );
        if ( '' === $template ) {
            $template = (string) get_post_meta( $post_id, '_wp_page_template', true );
        }
        return 'puffergo-fullpage.php' === $template;
    }

    /**
     * 加载 JS bundle 及行内配置数据
     */
    public function enqueue_assets() {
        if ( $this->should_skip() ) {
            return;
        }

        $plugin_url = plugin_dir_url( PUFFERGO_PLUGIN_FILE );
        $plugin_dir = plugin_dir_path( PUFFERGO_PLUGIN_FILE );

        $asset_file = $plugin_dir . 'build/admin/design-switcher/index.asset.php';
        $js_file    = $plugin_dir . 'build/admin/design-switcher/index.js';

        if ( ! file_exists( $js_file ) ) {
            return;
        }

        $deps    = array( 'wp-element', 'wp-i18n', 'wp-api-fetch' );
        $version = self::VERSION;

        if ( file_exists( $asset_file ) ) {
            $asset   = include $asset_file;
            $deps    = $asset['dependencies'] ?? $deps;
            $version = $asset['version']      ?? $version;
        }

        wp_enqueue_script(
            self::HANDLE,
            esc_url( $plugin_url . 'build/admin/design-switcher/index.js' ),
            $deps,
            $version,
            true
        );

        wp_localize_script(
            self::HANDLE,
            'puffergoDesignSwitcher',
            array(
                'restUrl'            => rest_url( 'puffergo/v1/' ),
                'nonce'              => wp_create_nonce( 'wp_rest' ),
                'isPuffergoFullpage' => $this->is_current_view_puffergo_fullpage(),
            )
        );

        $css_file = $plugin_dir . 'build/admin/design-switcher/index.css';
        if ( file_exists( $css_file ) ) {
            wp_enqueue_style(
                self::HANDLE,
                esc_url( $plugin_url . 'build/admin/design-switcher/index.css' ),
                array(),
                $version
            );
        }
    }

    /**
     * 输出 React 挂载节点（放在 footer，不影响页面渲染性能）
     */
    public function render_mount_node() {
        if ( $this->should_skip() ) {
            return;
        }
        echo '<div id="puffergo-design-switcher-root"></div>';
    }
}
