<?php
/**
 * Plugin Name:       PufferGo
 * Plugin URI:        https://puffergo.com/wp
 * Description:       AI-powered website builder designed for global growth. Create high-converting B2B landing pages and brand sites in minutes.
 * Version:           0.9.53
 * Requires at least: 6.7
 * Requires PHP:      7.4
 * Author:            深圳小河豚出海科技有限公司
 * Author URI:        https://PufferGo.com
 * License:           GPL-2.0-or-later
 * License URI:       https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain:       puffergo
 * Domain Path:       /languages
 *
 * @package PufferGo
 */

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

/*
|--------------------------------------------------------------------------
| 常量定义
|--------------------------------------------------------------------------
*/

// 定义插件主文件路径常量（用于激活钩子）
define( 'PUFFERGO_PLUGIN_FILE', __FILE__ );

/*
|--------------------------------------------------------------------------
| 调试日志辅助函数
|--------------------------------------------------------------------------
*/

/**
 * 记录调试日志（同时输出到 Query Monitor 和 error_log）
 *
 * @param string $message 日志消息
 * @param string $prefix  日志前缀（默认 'PufferGo'）
 */
function puffergo_log( $message, $prefix = 'PufferGo' ) {
	// Query Monitor 日志（QM 只接受单个参数，把 prefix 拼到消息前面）
	// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Query Monitor standard hook
	do_action( 'qm/debug', $prefix . ': ' . $message );

	// 传统 error_log（仅在 WP_DEBUG 模式下）
	if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
		// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log -- Intentional debug logging when WP_DEBUG enabled
		error_log( $prefix . ': ' . $message );
	}
}

// 定义插件目录路径
define( 'PUFFERGO_PLUGIN_DIR', __DIR__ );

// 定义 Core 版本常量（供客户插件检测依赖）
define( 'PUFFERGO_CORE_VERSION', '0.9.53' );

// 定义 API 基础 URL（支持通过 wp-config.php 自定义）
// 默认生产环境 URL
if ( ! defined( 'PUFFERGO_AI_PAGE_BUILDER_BASE_URL' ) ) {
    define( 'PUFFERGO_AI_PAGE_BUILDER_BASE_URL', 'https://api.puffergo.com' );
}
if ( ! defined( 'PUFFERGO_BASE_URL' ) ) {
    define( 'PUFFERGO_BASE_URL', 'https://puffergo.com' );
}

/*
|--------------------------------------------------------------------------
| 核心模块加载（前后台都需要）
|--------------------------------------------------------------------------
*/

// 头部净化器（必须在 WordPress 核心功能注册之前执行）
require_once PUFFERGO_PLUGIN_DIR . '/php/class-head-purifier.php';

// 单位配置类（必须在其他依赖它的类之前加载）
require_once PUFFERGO_PLUGIN_DIR . '/php/config/class-puffergo-unit-config.php';

// 单位格式化类
require_once PUFFERGO_PLUGIN_DIR . '/php/class-puffergo-unit-formatter.php';

// 统一 JS 翻译加载器
require_once PUFFERGO_PLUGIN_DIR . '/php/class-i18n-loader.php';
PufferGo_I18n_Loader::init();

// 品牌设计系统管理（必须在 Theme Bridge 之前加载，因为 Bridge 会调用其静态方法）
require_once PUFFERGO_PLUGIN_DIR . '/php/class-design-system.php';

// 主题样式桥接层（必须在 Tailwind 容器之前加载）
require_once PUFFERGO_PLUGIN_DIR . '/php/class-theme-bridge.php';

// 设计方案浮动切换器（管理员登录后前台 + 后台右侧悬浮按钮）
require_once PUFFERGO_PLUGIN_DIR . '/php/class-design-switcher.php';
new PufferGo_Design_Switcher();

// Tailwind 容器区块处理器（前台需要渲染区块）
require_once PUFFERGO_PLUGIN_DIR . '/php/class-tailwind-container.php';

// API 异常类（必须在 API 客户端之前加载）
require_once PUFFERGO_PLUGIN_DIR . '/php/class-puffergo-api-exception.php';

// 统一的 API 客户端（前后台 AJAX 都可能用到）
require_once PUFFERGO_PLUGIN_DIR . '/php/class-puffergo-api-client.php';

require_once PUFFERGO_PLUGIN_DIR . '/php/class-puffergo-workflow-jobs-rest.php';
new PufferGo_Workflow_Jobs_REST();

// 插件遥测（安装/卸载上报、反馈 URL）
require_once PUFFERGO_PLUGIN_DIR . '/php/class-telemetry.php';
PufferGo_Telemetry::register_hooks();

//THIS IS IMPORTANT
require_once PUFFERGO_PLUGIN_DIR . '/php/ai-site-builder.php';
new PufferGo_AI_Site_Builder();

// 站点信息 REST API + 全局品牌标识函数（puffergo_get_site_brand_identity / puffergo_the_logo）
// 必须在 header-context / footer-context 之前加载，因为它们依赖此文件中的函数。
require_once PUFFERGO_PLUGIN_DIR . '/php/site-profile.php';
new PufferGo_Site_Profile();

require_once PUFFERGO_PLUGIN_DIR . '/php/class-puffergo-nav-menu-helper.php';
require_once PUFFERGO_PLUGIN_DIR . '/php/class-puffergo-header-context.php';
require_once PUFFERGO_PLUGIN_DIR . '/php/class-puffergo-footer-context.php';

// 模板注册表 + 自动发现 + 统一渲染（新模板体系核心）
require_once PUFFERGO_PLUGIN_DIR . '/templates/class-puffergo-template-loader.php';
PufferGo_Template_Loader::init();

// 加载 AI 页面构建器（REST API始终可用，后台资源按需加载）
require_once PUFFERGO_PLUGIN_DIR . '/php/ai-page-builder.php';
new PufferGo_AI_Page_Builder();

// PufferGo Tool（REST 路由 /ai/process-html 需在 REST 请求时可用，故始终加载；编辑器资源仍仅 is_admin 时 enqueue）
require_once PUFFERGO_PLUGIN_DIR . '/php/puffergo-tool.php';
new PufferGo_Tool();

/*
|--------------------------------------------------------------------------
| 前台专用模块
|--------------------------------------------------------------------------
*/

if ( ! is_admin() ) {
    // 统计代码注入器（GA4、百度统计等）
    require_once PUFFERGO_PLUGIN_DIR . '/php/class-analytics.php';
    PufferGo_Analytics::init();
}

/*
|--------------------------------------------------------------------------
| 联系表单处理器（前后台都需要）
| - 前台：处理表单 AJAX 提交
| - 后台：查看询盘列表
|--------------------------------------------------------------------------
*/

require_once PUFFERGO_PLUGIN_DIR . '/php/class-contact-form-handler.php';
new PufferGo_Contact_Form_Handler();

require_once PUFFERGO_PLUGIN_DIR . '/php/class-puffergo-product-cpt.php';
new PufferGo_Product_CPT();

// 博客功能模块（REST API、分类颜色、评论处理、样式加载）
require_once PUFFERGO_PLUGIN_DIR . '/php/blog.php';

// 场景化插件推荐与安装（REST 路由需始终可用，后台菜单与资源按需加载）
require_once PUFFERGO_PLUGIN_DIR . '/php/class-plugin-setup.php';
new PufferGo_Plugin_Setup();

/*
|--------------------------------------------------------------------------
| 后台专用模块（仅在 admin 请求时加载）
|--------------------------------------------------------------------------
*/

if ( is_admin() ) {
    require_once PUFFERGO_PLUGIN_DIR . '/php/class-admin-loader.php';
    PufferGo_Admin_Loader::get_instance( PUFFERGO_PLUGIN_DIR );

    // Page AI Chat - 编辑器侧边栏 AI 聊天功能
    require_once PUFFERGO_PLUGIN_DIR . '/php/page-ai-chat.php';
}

/*
|--------------------------------------------------------------------------
| 区块注册
|--------------------------------------------------------------------------
*/

/**
 * 注册管理后台应用区块
 * Core 只负责注册管理应用区块（如 dashboard-app、ai-admin-app 等）
 * 前端展示区块由客户插件负责注册
 */
function puffergo_core_register_admin_blocks() {
	$admin_blocks = array(
		'dashboard-app',
		'ai-site-builder-app',
		'settings-app',
		'site-profile-app',
		'tailwind-container',
		'contact-form',
		'inquiries-app',
	);

	$blocks_dir = PUFFERGO_PLUGIN_DIR . '/build/blocks';

	foreach ( $admin_blocks as $block_type ) {
		$block_path = $blocks_dir . "/{$block_type}";
		if ( file_exists( $block_path ) ) {
			register_block_type( $block_path );
		}
	}
}
add_action( 'init', 'puffergo_core_register_admin_blocks' );

/**
 * Register PufferGo nav menu locations.
 *
 * Footer uses a single location and relies on menu item hierarchy:
 * - Top-level items: section titles
 * - Children: links under each section
 */
function puffergo_register_nav_menu_locations() {
	register_nav_menus(
		array(
			'puffergo_primary' => __( 'PufferGo Header Menu', 'puffergo' ),
			'puffergo_footer'  => __( 'PufferGo Footer', 'puffergo' ),
		)
	);
}
add_action( 'init', 'puffergo_register_nav_menu_locations' );

/**
 * 添加 PufferGo 区块分类（排在最前面）
 */
function puffergo_register_block_category( $categories ) {
	return array_merge(
		array(
			array(
				'slug'  => 'puffergo',
				'title' => __( 'PufferGo', 'puffergo' ),
				'icon'  => 'superhero-alt',
			),
		),
		$categories
	);
}
add_filter( 'block_categories_all', 'puffergo_register_block_category', 1 );

/*
|--------------------------------------------------------------------------
| 插件激活/卸载钩子
|--------------------------------------------------------------------------
*/

/**
 * 插件激活时创建数据库表并上报安装事件
 */
function puffergo_activate() {
    require_once PUFFERGO_PLUGIN_DIR . '/php/class-contact-form-handler.php';
    $contact_handler = new PufferGo_Contact_Form_Handler();
    $contact_handler->create_table();
    if ( defined( 'PUFFERGO_CORE_VERSION' ) ) {
        update_option( 'puffergo_version', PUFFERGO_CORE_VERSION );
    }
    require_once PUFFERGO_PLUGIN_DIR . '/php/class-telemetry.php';
    if ( ! get_option( 'puffergo_download_sent', false ) ) {
        PufferGo_Telemetry::send_download_event();
        update_option( 'puffergo_download_sent', '1' );
    }
    PufferGo_Telemetry::send_activate_event();
    require_once PUFFERGO_PLUGIN_DIR . '/php/class-puffergo-product-cpt.php';
    new PufferGo_Product_CPT();

    // Ensure PufferGo menu locations exist (empty menus, user manages via Appearance → Menus).
    puffergo_ensure_primary_menu();
    puffergo_ensure_footer_menu();

    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'puffergo_activate' );
