<?php
// miniapp/api/admin_plans.php
// مدیریت کامل پلن‌ها برای ادمین (افزودن/ویرایش/حذف)
header('Content-Type: application/json; charset=utf-8');

require __DIR__ . '/config.php';

$method = $_SERVER['REQUEST_METHOD'];

// دریافت user_id بر اساس متد
if ($method === 'GET') {
    $userId = isset($_GET['user_id']) ? (int)$_GET['user_id'] : 0;
    $action = isset($_GET['action']) ? $_GET['action'] : 'list';
    $planId = isset($_GET['plan_id']) ? (int)$_GET['plan_id'] : 0;
    $category = isset($_GET['category']) ? $_GET['category'] : '';
} else {
    $input = json_decode(file_get_contents('php://input'), true);
    $userId = isset($input['user_id']) ? (int)$input['user_id'] : 0;
    $action = isset($input['action']) ? $input['action'] : '';
    $planId = isset($input['plan_id']) ? (int)$input['plan_id'] : 0;
}

if ($userId <= 0) {
    echo json_encode(['ok' => false, 'error' => 'شناسه کاربر نامعتبر است'], JSON_UNESCAPED_UNICODE);
    exit;
}

if (!isAdmin($userId)) {
    echo json_encode(['ok' => false, 'error' => 'فقط ادمین مجاز است'], JSON_UNESCAPED_UNICODE);
    exit;
}

try {
    if ($method === 'GET') {
        if ($action === 'list') {
            // لیست همه پلن‌ها
            $query = "SELECT * FROM plans WHERE is_active = 1 ORDER BY category, price ASC";
            if ($category) {
                $stmt = $pdo->prepare("SELECT * FROM plans WHERE is_active = 1 AND category = ? ORDER BY price ASC");
                $stmt->execute([$category]);
            } else {
                $stmt = $pdo->query($query);
            }
            $plans = $stmt->fetchAll(PDO::FETCH_ASSOC);

            // دسته‌بندی‌ها
            $catStmt = $pdo->query("SELECT * FROM plan_categories WHERE is_active = 1 ORDER BY display_order ASC");
            $categories = $catStmt->fetchAll(PDO::FETCH_ASSOC);

            echo json_encode([
                'ok' => true,
                'data' => [
                    'plans' => $plans,
                    'categories' => $categories
                ]
            ], JSON_UNESCAPED_UNICODE);

        } elseif ($action === 'get' && $planId > 0) {
            // دریافت یک پلن
            $stmt = $pdo->prepare("SELECT * FROM plans WHERE id = ?");
            $stmt->execute([$planId]);
            $plan = $stmt->fetch(PDO::FETCH_ASSOC);

            if (!$plan) {
                echo json_encode(['ok' => false, 'error' => 'پلن یافت نشد'], JSON_UNESCAPED_UNICODE);
                exit;
            }

            echo json_encode(['ok' => true, 'data' => $plan], JSON_UNESCAPED_UNICODE);
        }

    } else { // POST
        switch ($action) {
            case 'add':
                // افزودن پلن جدید
                $category = isset($input['category']) ? trim($input['category']) : '';
                $title = isset($input['title']) ? trim($input['title']) : '';
                $price = isset($input['price']) ? (int)$input['price'] : 0;
                $durationLabel = isset($input['duration_label']) ? trim($input['duration_label']) : '1m';
                $users = isset($input['users']) ? (int)$input['users'] : 1;
                $planCode = isset($input['plan_code']) ? trim($input['plan_code']) : '';

                if (empty($category) || empty($title) || $price <= 0) {
                    echo json_encode(['ok' => false, 'error' => 'اطلاعات ناقص است'], JSON_UNESCAPED_UNICODE);
                    exit;
                }

                // ساخت کد پلن اگر وارد نشده
                if (empty($planCode)) {
                    if (strpos($category, 'VIP') !== false) {
                        preg_match('/VIP_(\d+)M/', $category, $m);
                        $months = $m[1] ?? 1;
                        $planCode = "VIP_{$users}U_{$months}M";
                    } elseif (strpos($category, 'VOL') !== false) {
                        preg_match('/(\d+)[gG]/', $durationLabel, $m);
                        $gb = $m[1] ?? 10;
                        $planCode = "VOL_{$gb}G_1M";
                    } else {
                        $planCode = strtoupper(str_replace(' ', '_', $title)) . '_' . time();
                    }
                }

                // بررسی تکراری نبودن کد
                $checkStmt = $pdo->prepare("SELECT id FROM plans WHERE plan_code = ?");
                $checkStmt->execute([$planCode]);
                if ($checkStmt->fetch()) {
                    echo json_encode(['ok' => false, 'error' => 'کد پلن تکراری است'], JSON_UNESCAPED_UNICODE);
                    exit;
                }

                $insertStmt = $pdo->prepare("
                    INSERT INTO plans (category, title, price, duration_label, users, plan_code, is_active, created_at) 
                    VALUES (?, ?, ?, ?, ?, ?, 1, NOW())
                ");
                $insertStmt->execute([$category, $title, $price, $durationLabel, $users, $planCode]);
                $newId = $pdo->lastInsertId();

                echo json_encode([
                    'ok' => true,
                    'message' => 'پلن با موفقیت اضافه شد',
                    'plan_id' => $newId,
                    'plan_code' => $planCode
                ], JSON_UNESCAPED_UNICODE);
                break;

            case 'edit':
                // ویرایش پلن
                if ($planId <= 0) {
                    echo json_encode(['ok' => false, 'error' => 'شناسه پلن نامعتبر است'], JSON_UNESCAPED_UNICODE);
                    exit;
                }

                $title = isset($input['title']) ? trim($input['title']) : null;
                $price = isset($input['price']) ? (int)$input['price'] : null;
                $durationLabel = isset($input['duration_label']) ? trim($input['duration_label']) : null;
                $users = isset($input['users']) ? (int)$input['users'] : null;

                $updates = [];
                $params = [];

                if ($title !== null) {
                    $updates[] = "title = ?";
                    $params[] = $title;
                }
                if ($price !== null) {
                    $updates[] = "price = ?";
                    $params[] = $price;
                }
                if ($durationLabel !== null) {
                    $updates[] = "duration_label = ?";
                    $params[] = $durationLabel;
                }
                if ($users !== null) {
                    $updates[] = "users = ?";
                    $params[] = $users;
                }

                if (empty($updates)) {
                    echo json_encode(['ok' => false, 'error' => 'هیچ تغییری وارد نشده'], JSON_UNESCAPED_UNICODE);
                    exit;
                }

                $updates[] = "updated_at = NOW()";
                $params[] = $planId;

                $sql = "UPDATE plans SET " . implode(', ', $updates) . " WHERE id = ?";
                $stmt = $pdo->prepare($sql);
                $stmt->execute($params);

                echo json_encode(['ok' => true, 'message' => 'پلن با موفقیت ویرایش شد'], JSON_UNESCAPED_UNICODE);
                break;

            case 'delete':
                // حذف (غیرفعال کردن) پلن
                if ($planId <= 0) {
                    echo json_encode(['ok' => false, 'error' => 'شناسه پلن نامعتبر است'], JSON_UNESCAPED_UNICODE);
                    exit;
                }

                $stmt = $pdo->prepare("UPDATE plans SET is_active = 0, updated_at = NOW() WHERE id = ?");
                $stmt->execute([$planId]);

                echo json_encode(['ok' => true, 'message' => 'پلن با موفقیت حذف شد'], JSON_UNESCAPED_UNICODE);
                break;

            case 'toggle':
                // فعال/غیرفعال کردن پلن
                if ($planId <= 0) {
                    echo json_encode(['ok' => false, 'error' => 'شناسه پلن نامعتبر است'], JSON_UNESCAPED_UNICODE);
                    exit;
                }

                $stmt = $pdo->prepare("UPDATE plans SET is_active = NOT is_active, updated_at = NOW() WHERE id = ?");
                $stmt->execute([$planId]);

                echo json_encode(['ok' => true, 'message' => 'وضعیت پلن تغییر کرد'], JSON_UNESCAPED_UNICODE);
                break;

            default:
                echo json_encode(['ok' => false, 'error' => 'عملیات نامعتبر'], JSON_UNESCAPED_UNICODE);
        }
    }

} catch (Exception $e) {
    error_log("admin_plans error: " . $e->getMessage());
    echo json_encode(['ok' => false, 'error' => $e->getMessage()], JSON_UNESCAPED_UNICODE);
}
