<?php
/**
 * PufferGo 卸载脚本
 * 
 * 当插件被删除时,此文件将被执行
 * 用于清理插件创建的数据库选项和自定义文章类型
 * 
 * @package PufferGo
 * @since 1.0.0
 */

// 如果不是通过 WordPress 卸载流程调用,则退出
if (!defined('WP_UNINSTALL_PLUGIN')) {
    exit;
}

/**
 * 遥测 API 基础 URL（uninstall 时主插件未加载，需本地定义）
 */
function puffergo_uninstall_telemetry_base_url() {
    return defined( 'PUFFERGO_AI_PAGE_BUILDER_BASE_URL' ) ? PUFFERGO_AI_PAGE_BUILDER_BASE_URL : 'https://api.puffergo.com';
}

/**
 * 上报卸载事件（在删除选项前执行，以便带上已保存的卸载原因）
 */
function puffergo_send_uninstall_telemetry() {
    $reason  = get_option( 'puffergo_uninstall_reason', '' );
    $detail = get_option( 'puffergo_uninstall_reason_detail', '' );
    $base   = puffergo_uninstall_telemetry_base_url();
    $payload = array(
        'eventType'             => 'uninstall',
        'domain'                => home_url(),
        'phpVersion'            => PHP_VERSION,
        'wpVersion'             => ( isset( $GLOBALS['wp_version'] ) && is_string( $GLOBALS['wp_version'] ) ) ? $GLOBALS['wp_version'] : '',
        'pufferGoVersion'       => get_option( 'puffergo_version', '' ),
        'uninstallReason'       => is_string( $reason ) ? $reason : '',
        'uninstallReasonDetail'  => is_string( $detail ) ? $detail : '',
    );
    wp_remote_post(
        $base . '/api/telemetry/event',
        array(
            'headers' => array( 'Content-Type' => 'application/json; charset=utf-8' ),
            'body'    => wp_json_encode( $payload ),
            'timeout' => 3,
        )
    );
}

/**
 * 清理选项数据
 */
function puffergo_delete_options() {
    // 删除插件设置选项
    delete_option('puffergo_api_key');
    delete_option('puffergo_settings');
    delete_option('puffergo_version');
    delete_option('puffergo_uninstall_reason');
    delete_option('puffergo_uninstall_reason_detail');
    delete_option('puffergo_download_sent');

    // 对于多站点,也清理站点选项
    if (is_multisite()) {
        delete_site_option('puffergo_api_key');
        delete_site_option('puffergo_settings');
        delete_site_option('puffergo_version');
        delete_site_option('puffergo_uninstall_reason');
        delete_site_option('puffergo_uninstall_reason_detail');
        delete_site_option('puffergo_download_sent');
    }
}

/**
 * 清理临时数据和缓存
 */
function puffergo_delete_transients() {
    global $wpdb;
    
    // 删除所有 PufferGo 相关的 transient
    // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- 卸载时批量删除，无需缓存
    $wpdb->query(
        "DELETE FROM {$wpdb->options} 
        WHERE option_name LIKE '_transient_puffergo_%' 
        OR option_name LIKE '_transient_timeout_puffergo_%'"
    );
    
    // 对于多站点,也清理站点 transient
    if (is_multisite()) {
        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- 卸载时批量删除，无需缓存
        $wpdb->query(
            "DELETE FROM {$wpdb->sitemeta} 
            WHERE meta_key LIKE '_site_transient_puffergo_%' 
            OR meta_key LIKE '_site_transient_timeout_puffergo_%'"
        );
    }
}

/**
 * 执行清理
 * 
 * 注意: 如果用户只是禁用插件而不是删除,这些数据会被保留
 * 只有在用户明确删除插件时才会执行清理
 */
function puffergo_uninstall() {
    // 先上报卸载事件（含已保存的卸载原因），再清理
    puffergo_send_uninstall_telemetry();
    // 清理选项
    puffergo_delete_options();
    // 清理临时数据
    puffergo_delete_transients();
}

// 执行卸载清理
puffergo_uninstall();

// 记录卸载日志(可选,用于调试)
// 注意: 卸载时主插件代码不会加载,所以不能调用插件自定义函数
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log -- 仅调试环境记录日志
    error_log( 'PufferGo: 插件已卸载,所有数据已清理' );
}
