<?php
/**
 * Plugin Name:  小栈AI综合助手
 * Plugin URI:   https://xzdbk.com
 * Description:  AI驱动的WordPress综合管理插件
 * Version:      3.2.1
 * Author:       小栈
 * Author URI:   https://xzdbk.com
 * Text Domain:  xzdbk-ai
 * Domain Path:  /languages
 * Requires PHP: 8.0
 * Requires WP:  6.0
 */

defined('ABSPATH') || exit;

define('XZD_AI_VERSION', '3.2.1');
define('XZD_AI_FILE', __FILE__);
define('XZD_AI_DIR', plugin_dir_path(__FILE__));
define('XZD_AI_URL', plugin_dir_url(__FILE__));
define('XZD_AI_REST_NAMESPACE', 'xzdbk-ai/v1');
define('XZD_AI_MIN_PHP', '8.0');
define('XZD_AI_MIN_WP', '6.0');
define('XZD_AI_OPTION_KEY', 'xzd_ai_settings');
define('XZD_AI_ENC_PREFIX', 'xzd_enc::');

// 自动加载
$autoload = XZD_AI_DIR . 'vendor/autoload.php';
if (file_exists($autoload)) {
    require_once $autoload;
} else {
    spl_autoload_register(function ($class) {
        $prefix = 'XZD\\AI\\V5\\';
        $len = strlen($prefix);
        if (strncmp($prefix, $class, $len) !== 0) {
            return;
        }
        $relative = substr($class, $len);
        $file = XZD_AI_DIR . 'src/' . str_replace('\\', '/', $relative) . '.php';
        if (file_exists($file)) {
            require $file;
        }
    });
}

// 先注册自定义时间间隔，再加载 Action Scheduler（AS 在内部会用这些间隔）
add_filter('cron_schedules', function (array $schedules): array {
    $schedules['every_minute']     = $schedules['every_minute']     ?? ['interval' => 60, 'display' => 'Every Minute'];
    $schedules['every_30_seconds'] = $schedules['every_30_seconds'] ?? ['interval' => 30, 'display' => 'Every 30 Seconds'];
    return $schedules;
}, 1);

$asBootstrap = XZD_AI_DIR . 'vendor/woocommerce/action-scheduler/action-scheduler.php';
if (file_exists($asBootstrap)) {
    require_once $asBootstrap;
}

// AS 内部用 wp_schedule_event 创建定时任务时，确保间隔名一定存在
add_filter('action_scheduler_run_schedule', function (string $schedule): string {
    return isset(wp_get_schedules()[$schedule]) ? $schedule : 'every_minute';
}, PHP_INT_MAX);

// WP 重新排期 cron 事件时可能找不到自定义间隔，最后兜一下
add_filter('pre_reschedule_event', function ($pre, $event) {
    if ($event && ($event->schedule ?? '') === 'every_minute' && !isset(wp_get_schedules()['every_minute'])) {
        add_filter('cron_schedules', fn(array $s): array => $s + ['every_minute' => ['interval' => 60, 'display' => 'Every Minute']], -PHP_INT_MAX);
    }
    return $pre;
}, 10, 2);

// PHP 版本检查
if (version_compare(PHP_VERSION, XZD_AI_MIN_PHP, '<')) {
    add_action('admin_notices', function () {
        printf(
            '<div class="notice notice-error"><p>小栈AI综合助手需要 PHP %s 以上版本，当前为 %s。</p></div>',
            esc_html(XZD_AI_MIN_PHP),
            esc_html(PHP_VERSION)
        );
    });
    return;
}

// WP 版本检查
global $wp_version;
if (version_compare($wp_version, XZD_AI_MIN_WP, '<')) {
    add_action('admin_notices', function () use ($wp_version) {
        printf(
            '<div class="notice notice-error"><p>小栈AI综合助手需要 WordPress %s 以上版本，当前为 %s。</p></div>',
            esc_html(XZD_AI_MIN_WP),
            esc_html($wp_version)
        );
    });
    return;
}

// 加密版检测：如果文件已加密但服务器没装 SG16 扩展，就别启动
$pluginHead = @file_get_contents(XZD_AI_DIR . 'src/Core/Plugin.php', false, null, 0, 100);
if ($pluginHead && strpos($pluginHead, 'sg_load') !== false && !function_exists('sg_load')) {
    // 偷偷探测一下服务器环境，帮用户找到正确的 loader 文件
    $phpVer   = PHP_VERSION;
    $phpMajor = substr($phpVer, 0, 3);                     // 比如 "8.2"
    $isTS     = defined('ZEND_THREAD_SAFE') && ZEND_THREAD_SAFE;
    $tsLabel  = $isTS ? 'ts' : '';                         // TS 版文件名多个 "ts"
    $isWin    = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
    $osCode   = $isWin ? 'win' : 'unix';
    $extName  = $isWin ? 'win' : 'lin';
    $loader   = "ixed.{$phpMajor}{$tsLabel}.{$extName}";   // 比如 ixed.8.2.lin
    $dlUrl    = "https://www.xzdbk.com/wp-download/loader/{$osCode}/{$loader}";
    $wizUrl   = XZD_AI_URL . 'src/Core/LoaderInstaller.php?xzd_wizard=1';

    add_action('admin_notices', function () use ($phpVer, $tsLabel, $loader, $dlUrl, $wizUrl) {
        echo '<div class="notice notice-error" style="padding:16px 20px;border-left:4px solid #d63638;">';
        echo '<h3 style="margin:0 0 8px;">小栈AI助手没启动 — 还差一步</h3>';
        echo '<p style="margin:0 0 8px;font-size:14px;">';
        echo '你的服务器是 🐘 PHP ' . esc_html($phpVer) . '（' . (empty($tsLabel) ? 'NTS' : 'TS') . '），';
        echo '需要装一个叫 <code>' . esc_html($loader) . '</code> 的解码文件才能运行这个插件。</p>';
        echo '<p style="margin:0;">';
        echo '<a href="' . esc_url($dlUrl) . '" class="button button-primary" target="_blank">下载解码文件</a> ';
        echo '<a href="' . esc_url($wizUrl) . '" class="button" target="_blank">打开安装向导</a>';
        echo '</p></div>';
    });
    return;
}

XZD\AI\V5\Core\Plugin::instance()->boot();
