<?php
/**
 * WordPress API 控制器 - 简化版
 * 支持单篇文章创建
 */

// 安全令牌
define('API_TOKEN', 'AdSense2024SecretToken');

// 加载 WordPress
$wp_load_paths = [
    __DIR__ . '/wp-load.php',
    dirname(__DIR__) . '/wp-load.php',
];

foreach ($wp_load_paths as $path) {
    if (file_exists($path)) {
        require_once($path);
        break;
    }
}

if (!defined('ABSPATH')) {
    die(json_encode(['status' => 'error', 'message' => 'WordPress not loaded']));
}

// 设置 headers
header('Content-Type: application/json; charset=UTF-8');

// 认证
$headers = getallheaders();
$auth = isset($headers['Authorization']) ? $headers['Authorization'] : '';
$token = str_replace('Bearer ', '', $auth);

if ($token !== API_TOKEN) {
    http_response_code(401);
    die(json_encode(['status' => 'error', 'message' => 'Unauthorized']));
}

// 获取请求数据
$input = file_get_contents('php://input');
$data = json_decode($input, true);

$command = isset($data['command']) ? $data['command'] : '';
$payload = isset($data['payload']) ? $data['payload'] : [];

// 执行命令
switch ($command) {
    case 'get_stats':
        $post_count = wp_count_posts('post')->publish;
        $page_count = wp_count_posts('page')->publish;
        
        echo json_encode([
            'status' => 'success',
            'data' => [
                'site_name' => get_bloginfo('name'),
                'posts' => $post_count,
                'pages' => $page_count
            ]
        ]);
        break;
        
    case 'create_post':
        $title = $payload['title'] ?? 'Untitled';
        $content = $payload['content'] ?? '';
        $status = $payload['status'] ?? 'draft';
        $category_name = $payload['category'] ?? '';
        
        // 创建或获取分类
        $cat_id = 0;
        if ($category_name) {
            $cat_id = wp_create_category($category_name);
        }
        
        $post_data = [
            'post_title' => $title,
            'post_content' => $content,
            'post_status' => $status,
            'post_type' => 'post'
        ];
        
        if ($cat_id) {
            $post_data['post_category'] = [$cat_id];
        }
        
        $post_id = wp_insert_post($post_data);
        
        if (is_wp_error($post_id)) {
            echo json_encode([
                'status' => 'error',
                'message' => $post_id->get_error_message()
            ]);
        } else {
            echo json_encode([
                'status' => 'success',
                'data' => [
                    'post_id' => $post_id,
                    'post_url' => get_permalink($post_id)
                ]
            ]);
        }
        break;
        
    default:
        echo json_encode(['status' => 'error', 'message' => 'Unknown command']);
}
?>
