<?php
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

/**
 * PufferGo I18n Loader - 统一管理 JS 国际化资源加载
 * 
 * 功能说明：
 * 1. 集中管理所有 React 应用的脚本句柄（Handle）
 * 2. 统一挂载翻译文件，避免在每个业务类中重复调用 wp_set_script_translations
 * 3. 确保在脚本注册后正确绑定 JSON 翻译文件
 * 
 * @package PufferGo
 * @since 1.0.0
 */

class PufferGo_I18n_Loader {

    /**
     * 需要加载翻译的所有 JS 句柄列表
     * 对应 scripts/generate-json.js 中的 handles 列表
     */
    const JS_HANDLES = array(
        'puffergo-dashboard',
        'puffergo-ai-site-builder',
        'puffergo-ai-admin-app',
        'puffergo-ai-page-builder',
        'puffergo-page-ai-chat',
        'puffergo-tool',
        'puffergo-settings',
        'puffergo-site-profile',
        'puffergo-wp-dashboard-banner',
        'puffergo-inquiries',
    );

    /**
     * 初始化
     */
    public static function init() {
        $instance = new self();
        add_action( 'plugins_loaded', array( $instance, 'load_php_translations' ) );
        // 使用较高的优先级 (100)，确保在各业务模块注册脚本之后执行
        // 仅在后台和编辑器加载，避免干扰前台性能
        add_action( 'admin_enqueue_scripts', array( $instance, 'load_script_translations' ), 100 );
        add_action( 'enqueue_block_editor_assets', array( $instance, 'load_script_translations' ), 100 );
    }

    /**
     * 加载 PHP 翻译文件，确保后台菜单等非 JS 文案可翻译
     */
    public function load_php_translations() {
        if ( ! defined( 'PUFFERGO_PLUGIN_FILE' ) ) {
            return;
        }

        $rel = dirname( plugin_basename( PUFFERGO_PLUGIN_FILE ) ) . '/languages';

        load_plugin_textdomain(
            'puffergo',
            false,
            $rel
        );

        /*
         * 再强制加载插件目录下的 .mo。
         * WP 会优先读 wp-content/languages/plugins/puffergo-{locale}.mo；
         * 若该文件旧/空，会导致菜单等新词条永远不译——用插件内 mo 覆盖。
         */
        $locale = function_exists( 'determine_locale' ) ? determine_locale() : get_locale();
        $mofile = plugin_dir_path( PUFFERGO_PLUGIN_FILE ) . 'languages/puffergo-' . $locale . '.mo';
        if ( is_readable( $mofile ) ) {
            load_textdomain( 'puffergo', $mofile, $locale );
        }
    }

    /**
     * 为所有已注册的脚本加载翻译
     */
    public function load_script_translations() {
        $plugin_rel_path = plugin_basename( dirname( dirname( __FILE__ ) ) ) . '/languages';
        $languages_dir = plugin_dir_path( dirname( __FILE__ ) ) . 'languages';

        foreach ( self::JS_HANDLES as $handle ) {
            // wp_set_script_translations 会自动检查脚本是否已注册
            // 如果脚本未注册，它会静默失败（这是预期的，因为并非所有页面都加载所有脚本）
            wp_set_script_translations( $handle, 'puffergo', $languages_dir );
        }
    }
}
