<?php
if($text == "🎁 کدهدیه" && ($user->is_owner || $user->is_admin)) {
    $msg = "🎁 *مدیریت کدهای هدیه*\n\n" .
        "لطفاً یکی از گزینه‌های زیر را انتخاب کنید:";
    $keyboard = json_encode([
        'inline_keyboard' => [
            [['text' => '➕ ساخت کد هدیه', 'callback_data' => 'admin_create_gift_code']],
            [['text' => '📋 لیست کدهای هدیه', 'callback_data' => 'admin_list_gift_codes:1']]
        ]
    ]);
    sendMessage($chat_id, $msg, $keyboard);
    die;
}


if($data == 'admin_create_gift_code' && ($user->is_owner || $user->is_admin)) {
    setStep($chat_id, 'admin:create_gift:code');
    $cancel_keyboard = json_encode([
        'keyboard' => [
            [['text' => '🔙 بازگشت به مدیریت']]
        ],
        'resize_keyboard' => true
    ]);
    sendMessage($chat_id, "✏️ لطفاً *عنوان کد هدیه* را وارد کنید (مثلاً NORUZ1404):", $cancel_keyboard);
    answerCallbackQuery($query_id);
    die;
}


if($user->step == 'admin:create_gift:code') {
    $giftCode = trim($text);
    $stmt = $pdo->prepare("SELECT id FROM `gift_codes` WHERE `code` = ?");
    $stmt->execute([$giftCode]);
    $existing = $stmt->fetch();

if($existing) {
        $gid = $existing->id;
        $stmtDelUse = $pdo->prepare("DELETE FROM `gift_code_usages` WHERE `gift_code_id` = ?");
        $stmtDelUse->execute([$gid]);
        $stmtDel = $pdo->prepare("DELETE FROM `gift_codes` WHERE `id` = ?");
        $stmtDel->execute([$gid]);
}

    setStep($chat_id, "admin:create_gift:coins:$giftCode");
    sendMessage($chat_id, "💰 لطفاً *مقدار سکه* هدیه را وارد کنید (به عدد):");
    die;
}


if(strpos($user->step, 'admin:create_gift:coins:') === 0) {

if(!is_numeric($text) || intval($text) <= 0) {
        sendMessage($chat_id, "⚠️ لطفاً یک عدد معتبر برای مقدار سکه وارد کنید:");
        die;
}

    $giftCode = explode(':', $user->step)[3];
    $coins    = intval($text);
    setStep($chat_id, "admin:create_gift:limit:$giftCode:$coins");
    sendMessage($chat_id, "👥 لطفاً *تعداد دفعات قابل استفاده* را وارد کنید (به عدد):");
    die;
}


if(strpos($user->step, 'admin:create_gift:limit:') === 0) {

if(!is_numeric($text) || intval($text) <= 0) {
        sendMessage($chat_id, "⚠️ لطفاً یک عدد معتبر برای تعداد دفعات وارد کنید:");
        die;
}

    $parts    = explode(':', $user->step);
    $giftCode = $parts[3];
    $coins    = $parts[4];
    $limit    = intval($text);
    setStep($chat_id, "admin:create_gift:date:$giftCode:$coins:$limit");
    sendMessage($chat_id, "📅 لطفاً *تاریخ انقضا* را به صورت شمسی وارد کنید (مثال: 1404/11/02):");
    die;
}


if(strpos($user->step, 'admin:create_gift:date:') === 0) {
    $parts     = explode(':', $user->step);
    $giftCode  = $parts[3];
    $coins     = $parts[4];
    $limit     = $parts[5];
    $dateInput = tr_num($text, 'en'); 
    $dateParts = explode('/', $dateInput);

if(count($dateParts) != 3) {
        sendMessage($chat_id, "⚠️ فرمت تاریخ اشتباه است. لطفاً به صورت YYYY/MM/DD وارد کنید:");
        die;
}

    $jy = intval($dateParts[0]);
    $jm = intval($dateParts[1]);
    $jd = intval($dateParts[2]);

if(!function_exists('jalali_to_gregorian')) {
        include_once 'libs/jdf.php';
}

    $gDateArr = jalali_to_gregorian($jy, $jm, $jd);
    $gDate    = implode('-', $gDateArr) . " 23:59:59"; 
    $now      = date('Y-m-d H:i:s');

if(strtotime($gDate) < strtotime(date('Y-m-d 00:00:00'))) {
        sendMessage($chat_id, "⏰ تاریخ انقضا نباید گذشته باشد. یک تاریخ امروز یا آینده وارد کنید:");
        die;
}

    $stmt = $pdo->prepare("INSERT INTO `gift_codes` (`code`, `coins`, `usage_limit`, `expires_at`) VALUES (?, ?, ?, ?)");
    $stmt->execute([$giftCode, $coins, $limit, $gDate]);
    $msg = "✅ *کد هدیه با موفقیت ساخته شد.*\n\n" .
        "🔖 *کد:* $giftCode\n" .
        "💰 *سکه:* *$coins*\n" .
        "👥 *ظرفیت:* *$limit* نفر\n" .
        "📅 *انقضا:* *$dateInput*";
    setStep($chat_id, 'none');
    sendMessage($chat_id, $msg, $admin_keyboard);
    die;
}


if((strpos($data, 'admin_list_gift_codes:') === 0 || strpos($data, 'admin_refresh_gift_code:') === 0) && ($user->is_owner || $user->is_admin)) {
    $page   = intval(explode(':', $data)[1]);
    $limit  = 1; 
    $offset = ($page - 1) * $limit;
    $stmtCount  = $pdo->query("SELECT COUNT(*) FROM `gift_codes`");
    $totalCodes = $stmtCount->fetchColumn();

if($totalCodes == 0) {
        answerCallbackQuery($query_id, "📭 هیچ کد هدیه‌ای یافت نشد.", true);
        die;
}

    $stmt = $pdo->prepare("SELECT * FROM `gift_codes` ORDER BY `created_at` DESC LIMIT $limit OFFSET $offset");
    $stmt->execute();
    $codes = $stmt->fetchAll();

if(empty($codes)) {
        answerCallbackQuery($query_id, "صفحه مورد نظر یافت نشد.", true);
        die;
}

    $code        = $codes[0];
    $remaining   = $code->usage_limit - $code->used_count;
    $statusEmoji = ($code->status == 'active') ? "✅" : "❌";
    $statusText  = ($code->status == 'active') ? "فعال" : "غیرفعال";

if(strtotime($code->expires_at) < time()) {
        $statusEmoji = "⏰";
        $statusText  = "منقضی شده";
} elseif ($remaining <= 0) {
        $statusEmoji = "🚫";
        $statusText  = "تمام شده";
}

    $expireJalali = jdate("Y/m/d", strtotime($code->expires_at));
    $responseText = "🎁 *لیست کدهای هدیه* (صفحه $page از $totalCodes)\n\n" .
        "🔖 *کد:* {$code->code}\n" .
        "💰 *مقدار:* *{$code->coins}* سکه\n" .
        "📊 *وضعیت:* $statusEmoji *$statusText*\n" .
        "👥 *استفاده شده:* *{$code->used_count}*\n" .
        "📉 *باقی‌مانده:* *$remaining*\n" .
        "📅 *انقضا:* *$expireJalali*";
    $keyboard = [];
    $navRow   = [];

if($page > 1) {
        $navRow[] = ['text' => '➡️ قبلی', 'callback_data' => 'admin_list_gift_codes:' . ($page - 1)];
}


if($page < $totalCodes) {
        $navRow[] = ['text' => 'بعدی ⬅️', 'callback_data' => 'admin_list_gift_codes:' . ($page + 1)];
}


if(!empty($navRow)) {
        $keyboard[] = $navRow;
}

    $keyboard[] = [
        ['text' => '👥 لیست استفاده‌کنندگان', 'callback_data' => 'admin_gift_code_users:' . $code->id . ':1']
    ];
    $keyboard[] = [
        ['text' => '🔄 بروزرسانی', 'callback_data' => 'admin_refresh_gift_code:' . $page],
        ['text' => '🔙 بازگشت', 'callback_data' => 'admin_gift_menu_back']
    ];
    $markup = json_encode(['inline_keyboard' => $keyboard]);

if($message_id) {
        editMessage($chat_id, $message_id, $responseText, $markup);
} else {
        sendMessage($chat_id, $responseText, $markup);
}


if(strpos($data, 'admin_refresh_gift_code:') === 0) {
        answerCallbackQuery($query_id, "✅ وضعیت بروزرسانی شد.");
} else {
        answerCallbackQuery($query_id);
}

    die;
}


if(strpos($data, 'admin_gift_code_users:') === 0 && ($user->is_owner || $user->is_admin)) {
    $parts   = explode(':', $data);
    $gift_id = intval($parts[1]);
    $page    = isset($parts[2]) ? intval($parts[2]) : 1;
    $limit   = 10; 
    $offset  = ($page - 1) * $limit;
    $stmtGift = $pdo->prepare("SELECT * FROM `gift_codes` WHERE `id` = ?");
    $stmtGift->execute([$gift_id]);
    $gift = $stmtGift->fetch();

if(!$gift) {
        answerCallbackQuery($query_id, "❌ کد هدیه یافت نشد.", true);
        die;
}

    $stmtCount = $pdo->prepare("SELECT COUNT(DISTINCT `user_id`) FROM `gift_code_usages` WHERE `gift_code_id` = ?");
    $stmtCount->execute([$gift_id]);
    $totalUsers = $stmtCount->fetchColumn();

if($totalUsers == 0) {
        answerCallbackQuery($query_id, "📭 هیچ کاربری هنوز از این کد استفاده نکرده است.", true);
        die;
}

    $stmtUsers = $pdo->prepare("
        SELECT u.user_id, u.full_name, MAX(gcu.used_at) AS used_at
        FROM `gift_code_usages` gcu
        JOIN `users` u ON gcu.user_id = u.user_id
        WHERE gcu.gift_code_id = ?
        GROUP BY u.user_id, u.full_name
        ORDER BY used_at DESC
        LIMIT ? OFFSET ?
    ");
    $stmtUsers->bindValue(1, $gift_id, PDO::PARAM_INT);
    $stmtUsers->bindValue(2, $limit, PDO::PARAM_INT);
    $stmtUsers->bindValue(3, $offset, PDO::PARAM_INT);
    $stmtUsers->execute();
    $usersList = $stmtUsers->fetchAll();
    $responseText = "👥 *لیست استفاده‌کنندگان کد هدیه:* " . $gift->code . "\n\n";

foreach($usersList as $u) {
        $name          = $u->full_name ?? 'نامشخص';
        $date          = jdate("H:i  Y/m/d", strtotime($u->used_at));
        $responseText .= "👤 *کاربر:* " . $name . "\n";
        $responseText .= "🆔 *آیدی عددی:* " . $u->user_id . "\n";
        $responseText .= "📅 *تاریخ استفاده:* " . $date . "\n";
        $responseText .= "➖ ➖ ➖ ➖ ➖\n";
}

    $responseText .= "\n📄 *صفحه:* " . $page . " از " . ceil($totalUsers / $limit);
    $keyboard = [];
    $navRow   = [];

if($page > 1) {
        $navRow[] = ['text' => '➡️ قبلی', 'callback_data' => 'admin_gift_code_users:' . $gift_id . ':' . ($page - 1)];
}


if($page * $limit < $totalUsers) {
        $navRow[] = ['text' => 'بعدی ⬅️', 'callback_data' => 'admin_gift_code_users:' . $gift_id . ':' . ($page + 1)];
}


if(!empty($navRow)) {
        $keyboard[] = $navRow;
}

    $keyboard[] = [['text' => '🔙 بازگشت به لیست کدها', 'callback_data' => 'admin_list_gift_codes:1']];
    $markup = json_encode(['inline_keyboard' => $keyboard]);
    editMessage($chat_id, $message_id, $responseText, $markup);
    answerCallbackQuery($query_id);
    die;
}


if($data == 'admin_gift_menu_back') {
    $msg = "🎁 *مدیریت کدهای هدیه*\n\n" .
        "لطفاً یکی از گزینه‌های زیر را انتخاب کنید:";
    $keyboard = json_encode([
        'inline_keyboard' => [
            [['text' => '➕ ساخت کد هدیه', 'callback_data' => 'admin_create_gift_code']],
            [['text' => '📋 لیست کدهای هدیه', 'callback_data' => 'admin_list_gift_codes:1']]
        ]
    ]);
    editMessage($chat_id, $message_id, $msg, $keyboard);
    answerCallbackQuery($query_id);
    die;
}

