<?php

error_reporting(E_ALL);
ini_set('display_errors', 0);

/* =========================
   CONFIG
========================= */

$BOT_TOKEN = '8844959881:AAHXXYciOCIB_J3XwhBZUwEfV_9gZEAjyps';

$DB_HOST = 'localhost';
$DB_NAME = 'tstmonk_monkeybot';
$DB_USER = 'tstmonk_monkeyuser';
$DB_PASS = 'Reza.1381';


/* =========================
   DATABASE
========================= */

try {

    $pdo = new PDO(
        "mysql:host={$DB_HOST};dbname={$DB_NAME};charset=utf8mb4",
        $DB_USER,
        $DB_PASS,
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        ]
    );

} catch (Exception $e) {

    http_response_code(500);
    exit('Database Error');

}

require_once __DIR__ . '/monkeywebapp/api/cubepay.php';


/* =========================
   TELEGRAM
========================= */

function telegram($method, $data = [])
{
    global $BOT_TOKEN;

    $url = "https://api.telegram.org/bot{$BOT_TOKEN}/{$method}";

    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $result = curl_exec($ch);

    curl_close($ch);

    return json_decode($result, true);
}

/* =========================
   BLOCKED USER CHECK
========================= */
function isUserBlocked($pdo, $telegram_id)
{
    $stmt = $pdo->prepare("SELECT is_blocked FROM users WHERE telegram_id = ? LIMIT 1");
    $stmt->execute([$telegram_id]);
    $row = $stmt->fetch();
    return $row && (int)$row['is_blocked'] === 1;
}

function denyBlockedUser($chat_id)
{
    sendMessage(
        $chat_id,
        "⛔ دسترسی شما به مانکی مسدود شده است.\n\nدر صورت اشتباه بودن مسدودی، با مدیر سیستم تماس بگیرید."
    );
    exit('OK');
}

/* =========================
   LAST SEEN
========================= */
function updateLastSeen($pdo, $telegram_id)
{
    if (!$telegram_id) return;
    try {
        $pdo->prepare("UPDATE users SET last_seen = NOW() WHERE telegram_id = ?")
            ->execute([$telegram_id]);
    } catch (Exception $e) {
        // silent fail
    }
}

/* =========================
   SEEN IDS (جلوگیری از تکرار در اکسپلور)
========================= */
function getSeenIds($pdo, $telegram_id)
{
    $stmt = $pdo->prepare("SELECT seen_ids FROM users WHERE telegram_id = ? LIMIT 1");
    $stmt->execute([$telegram_id]);
    $row = $stmt->fetch();
    
    if (!$row || empty($row['seen_ids'])) {
        return [];
    }
    
    return array_filter(explode(',', $row['seen_ids']));
}

function addSeenId($pdo, $telegram_id, $seen_id)
{
    if (!$telegram_id || !$seen_id) return;
    
    try {
        $seen = getSeenIds($pdo, $telegram_id);
        $seen[] = (string)$seen_id;
        $seen = array_unique($seen);
        
        $stmt = $pdo->prepare("UPDATE users SET seen_ids = ? WHERE telegram_id = ?");
        $stmt->execute([implode(',', $seen), $telegram_id]);
    } catch (Exception $e) {
        // silent fail
    }
}

function resetSeenIds($pdo, $telegram_id)
{
    try {
        $pdo->prepare("UPDATE users SET seen_ids = NULL WHERE telegram_id = ?")
            ->execute([$telegram_id]);
    } catch (Exception $e) {
        // silent fail
    }
}


/* =========================
   SEND MESSAGE
========================= */

function sendMessage($chat_id, $text, $keyboard = null)
{
    $data = [
        'chat_id' => $chat_id,
        'text' => $text
    ];

    if ($keyboard !== null) {

        $data['reply_markup'] = json_encode(
            $keyboard,
            JSON_UNESCAPED_UNICODE
        );

    }

    return telegram('sendMessage', $data);
}


/* =========================
   CHAT HELPERS
========================= */
function copyMessage($to_chat_id, $from_chat_id, $message_id)
{
    return telegram('copyMessage', [
        'chat_id' => $to_chat_id,
        'from_chat_id' => $from_chat_id,
        'message_id' => $message_id
    ]);
}

function getCurrentRoom($pdo, $telegram_id)
{
    $stmt = $pdo->prepare("SELECT * FROM quick_chat_rooms WHERE user1_id = ? OR user2_id = ? LIMIT 1");
    $stmt->execute([$telegram_id, $telegram_id]);
    return $stmt->fetch();
}

function profileCaption($profile, $title = '👤 پروفایل')
{
    $location = '';
    if (!empty($profile['province'])) {
        $location = $profile['province'];
        if (!empty($profile['city'])) {
            $location .= '، ' . $profile['city'];
        }
    } elseif (!empty($profile['city'])) {
        $location = $profile['city'];
    } else {
        $location = 'نامشخص';
    }

    return $title . "\n\n" .
        "اسم: " . ($profile['name'] ?? '-') . "\n" .
        "🎂 سن: " . ($profile['age'] ?? '-') . "\n" .
        "📍 " . $location . "\n" .
        "⚧ جنسیت: " . ($profile['gender'] ?? '-') . "\n\n" .
        "📝 درباره من:\n" . ($profile['bio'] ?? '-');
}

/* =========================
   SEND PHOTO
========================= */

function sendPhoto($chat_id, $photo_path, $caption, $keyboard = null)
{
    $full_path = __DIR__ . '/' . $photo_path;

    if (!file_exists($full_path)) {

        return sendMessage(
            $chat_id,
            $caption,
            $keyboard
        );
    }

    $data = [
        'chat_id' => $chat_id,
        'photo' => new CURLFile($full_path),
        'caption' => $caption
    ];

    if ($keyboard !== null) {

        $data['reply_markup'] = json_encode(
            $keyboard,
            JSON_UNESCAPED_UNICODE
        );

    }

    return telegram('sendPhoto', $data);
} 
/* =========================
   MAIN MENU
========================= */

function mainMenu()
{
    return [
        'keyboard' => [
            [
                ['text' => '👤 پروفایل من'],
                ['text' => '🔎 اکسپلور']
            ],
            [
                ['text' => '❤️ کسایی که لایکم کردن'],
                ['text' => '💬 چت سریع']
            ],
            [
                ['text' => '🍌 Banana'],
                ['text' => '🚀 Boost پروفایل']
            ],
            [
                ['text' => '💎 اشتراک پرمیوم'],
                ['text' => '💬 چت‌های من']
            ]
        ],
        'resize_keyboard' => true
    ];
}

/* =========================
   GENDER KEYBOARD
========================= */

function genderKeyboard()
{
    return [
        'keyboard' => [
            [
                ['text' => '👩 زن'],
                ['text' => '👨 مرد']
            ]
        ],
        'resize_keyboard' => true
    ];
}


/* =========================
   EXPLORE KEYBOARD
========================= */

function exploreKeyboard()
{
    return [
        'keyboard' => [
            [
                ['text' => '👩 فقط خانم‌ها'],
                ['text' => '👨 فقط آقایان']
            ],
            [
                ['text' => '🌎 همه']
            ],
            [
                ['text' => '⬅️ بازگشت']
            ]
        ],
        'resize_keyboard' => true
    ];
}

function getExploreProvinces()
{
    return [
        'همه استان‌ها',
        'آذربایجان شرقی',
        'آذربایجان غربی',
        'اردبیل',
        'اصفهان',
        'البرز',
        'ایلام',
        'بوشهر',
        'تهران',
        'چهارمحال و بختیاری',
        'خراسان جنوبی',
        'خراسان رضوی',
        'خراسان شمالی',
        'خوزستان',
        'زنجان',
        'سمنان',
        'سیستان و بلوچستان',
        'فارس',
        'قزوین',
        'قم',
        'کردستان',
        'کرمان',
        'کرمانشاه',
        'کهگیلویه و بویراحمد',
        'گلستان',
        'گیلان',
        'لرستان',
        'مازندران',
        'مرکزی',
        'هرمزگان',
        'همدان',
        'یزد'
    ];
}

function exploreProvinceKeyboard($gender_code, $page = 1)
{
    $provinces = getExploreProvinces();
    $per_page = 10;
    $total_pages = (int)ceil(count($provinces) / $per_page);

    if ($page < 1) $page = 1;
    if ($page > $total_pages) $page = $total_pages;

    $start = ($page - 1) * $per_page;
    $page_provinces = array_slice($provinces, $start, $per_page);
    $buttons = [];

    for ($i = 0; $i < count($page_provinces); $i += 2) {
        $row = [];

        $global_index = $start + $i;
        $province = $page_provinces[$i];

        if ($global_index === 0) {
            $callback = 'explore_province_all_' . $gender_code;
        } else {
            $callback = 'explore_province_sel_' . ($global_index - 1) . '_' . $gender_code;
        }

        $row[] = [
            'text' => $province,
            'callback_data' => $callback
        ];

        if (isset($page_provinces[$i + 1])) {
            $global_index_2 = $start + $i + 1;
            $province_2 = $page_provinces[$i + 1];

            if ($global_index_2 === 0) {
                $callback_2 = 'explore_province_all_' . $gender_code;
            } else {
                $callback_2 = 'explore_province_sel_' . ($global_index_2 - 1) . '_' . $gender_code;
            }

            $row[] = [
                'text' => $province_2,
                'callback_data' => $callback_2
            ];
        }

        $buttons[] = $row;
    }

    $nav = [];
    if ($page > 1) {
        $nav[] = [
            'text' => '⬅️ قبلی',
            'callback_data' => 'explore_province_page_' . ($page - 1) . '_' . $gender_code
        ];
    }

    if ($page < $total_pages) {
        $nav[] = [
            'text' => 'بعدی ➡️',
            'callback_data' => 'explore_province_page_' . ($page + 1) . '_' . $gender_code
        ];
    }

    if (!empty($nav)) {
        $buttons[] = $nav;
    }

    $buttons[] = [
        [
            'text' => '❌ لغو',
            'callback_data' => 'back_explore'
        ]
    ];

    return [
        'inline_keyboard' => $buttons
    ];
}

function getExploreProvinceByIndex($index)
{
    $provinces = getExploreProvinces();
    return $provinces[$index + 1] ?? null;
}


/* =========================
   QUICK CHAT GENDER KEYBOARD
========================= */

function quickChatGenderKeyboard()
{
    return [
        'keyboard' => [
            [
                ['text' => '👩 زن'],
                ['text' => '👨 مرد']
            ],
            [
                ['text' => '🌎 فرقی ندارد']
            ],
            [
                ['text' => '❌ لغو']
            ]
        ],
        'resize_keyboard' => true
    ];
}


/* =========================
   CHAT KEYBOARD
========================= */

function chatKeyboard()
{
    return [
        'keyboard' => [
            [
                ['text' => '👤 مشاهده پروفایل'],
                ['text' => '❌ پایان چت']
            ]
        ],
        'resize_keyboard' => true
    ];
}


/* =========================
   PROFILE KEYBOARD
========================= */

function profileKeyboard()
{
    return [
        'inline_keyboard' => [
            [
                [
                    'text' => '✏️ ویرایش پروفایل',
                    'callback_data' => 'edit_profile'
                ]
            ]
        ]
    ];
}


/* =========================
   EDIT KEYBOARD
========================= */

function editKeyboard()
{
    return [
        'inline_keyboard' => [
            [
                [
                    'text' => '✏️ تغییر اسم',
                    'callback_data' => 'edit_name'
                ]
            ],
            [
                [
                    'text' => '📸 تغییر عکس',
                    'callback_data' => 'edit_photo'
                ]
            ],
            [
                [
                    'text' => '📍 تغییر استان',
                    'callback_data' => 'edit_province'
                ]
            ],
            [
                [
                    'text' => '🏙 تغییر شهر',
                    'callback_data' => 'edit_city'
                ]
            ],
            [
                [
                    'text' => '📝 تغییر توضیحات',
                    'callback_data' => 'edit_bio'
                ]
            ],
            [
                [
                    'text' => '⬅️ بازگشت',
                    'callback_data' => 'back_profile'
                ]
            ]
        ]
    ];
}


/* =========================
   BANANA KEYBOARD
========================= */

function bananaKeyboard($packages)
{
    $buttons = [];

    foreach ($packages as $pkg) {

        $buttons[] = [
            [
                'text' => '🍌 ' . $pkg['banana_amount'] . ' Banana  |  ⭐ ' . $pkg['star_price'],
                'callback_data' => 'banana_buy_' . $pkg['id']
            ]
        ];

    }

    return [
        'inline_keyboard' => $buttons
    ];
}


/* =========================
   REFERRAL KEYBOARD
========================= */

function referralKeyboard()
{
    return [
        'inline_keyboard' => [
            [
                [
                    'text' => '🎁 دریافت رایگان Banana',
                    'callback_data' => 'referral_show'
                ]
            ]
        ]
    ];
}


/* =========================
   PROVINCE KEYBOARD
========================= */

function provinceKeyboard($page = 1)
{
    $provinces = [
        'آذربایجان شرقی',
        'آذربایجان غربی',
        'اردبیل',
        'اصفهان',
        'البرز',
        'ایلام',
        'بوشهر',
        'تهران',
        'چهارمحال و بختیاری',
        'خراسان جنوبی',
        'خراسان رضوی',
        'خراسان شمالی',
        'خوزستان',
        'زنجان',
        'سمنان',
        'سیستان و بلوچستان',
        'فارس',
        'قزوین',
        'قم',
        'کردستان',
        'کرمان',
        'کرمانشاه',
        'کهگیلویه و بویراحمد',
        'گلستان',
        'گیلان',
        'لرستان',
        'مازندران',
        'مرکزی',
        'هرمزگان',
        'همدان',
        'یزد'
    ];

    $per_page = 10;
    $total = count($provinces);
    $total_pages = ceil($total / $per_page);

    $start = ($page - 1) * $per_page;
    $page_provinces = array_slice($provinces, $start, $per_page);

    $buttons = [];

    for ($i = 0; $i < count($page_provinces); $i += 2) {
        $row = [];

        $row[] = [
            'text' => $page_provinces[$i],
            'callback_data' => 'province_sel_' . ($start + $i)
        ];

        if (isset($page_provinces[$i + 1])) {
            $row[] = [
                'text' => $page_provinces[$i + 1],
                'callback_data' => 'province_sel_' . ($start + $i + 1)
            ];
        }

        $buttons[] = $row;
    }

    $nav = [];
    if ($page > 1) {
        $nav[] = [
            'text' => '⬅️ قبلی',
            'callback_data' => 'province_page_' . ($page - 1)
        ];
    }
    if ($page < $total_pages) {
        $nav[] = [
            'text' => 'بعدی ➡️',
            'callback_data' => 'province_page_' . ($page + 1)
        ];
    }
    if (!empty($nav)) {
        $buttons[] = $nav;
    }

    $buttons[] = [
        [
            'text' => 'صفحه ' . $page . ' از ' . $total_pages,
            'callback_data' => 'noop'
        ]
    ];

    return [
        'inline_keyboard' => $buttons
    ];
}


/* =========================
   GET PROVINCE BY INDEX
========================= */

function getProvinceByIndex($index)
{
    $provinces = [
        'آذربایجان شرقی',
        'آذربایجان غربی',
        'اردبیل',
        'اصفهان',
        'البرز',
        'ایلام',
        'بوشهر',
        'تهران',
        'چهارمحال و بختیاری',
        'خراسان جنوبی',
        'خراسان رضوی',
        'خراسان شمالی',
        'خوزستان',
        'زنجان',
        'سمنان',
        'سیستان و بلوچستان',
        'فارس',
        'قزوین',
        'قم',
        'کردستان',
        'کرمان',
        'کرمانشاه',
        'کهگیلویه و بویراحمد',
        'گلستان',
        'گیلان',
        'لرستان',
        'مازندران',
        'مرکزی',
        'هرمزگان',
        'همدان',
        'یزد'
    ];

    return $provinces[$index] ?? null;
}


/* =========================
   GET UPDATE
========================= */

$update = json_decode(
    file_get_contents('php://input'),
    true
);

if (!$update) {
    exit('OK');
}

/* =========================================================
   PRE CHECKOUT QUERY
========================================================= */

if (isset($update['pre_checkout_query'])) {

    $pre_checkout = $update['pre_checkout_query'];

    telegram('answerPreCheckoutQuery', [
        'pre_checkout_query_id' => $pre_checkout['id'],
        'ok' => true
    ]);

    exit('OK');
}

/* =========================================================
   SUCCESSFUL PAYMENT (Stars)
========================================================= */

if (isset($update['message']['successful_payment'])) {

    $payment = $update['message']['successful_payment'];

    $telegram_id = $update['message']['from']['id'];

    $chat_id = $update['message']['chat']['id'];

    if (isUserBlocked($pdo, $telegram_id)) {
        denyBlockedUser($chat_id);
    }

    updateLastSeen($pdo, $telegram_id);

    $payload = $payment['invoice_payload'] ?? '';

    if (strpos($payload, 'banana_buy_') === 0) {

        $package_id = (int)substr($payload, 11);

        $stmt = $pdo->prepare("
            SELECT *
            FROM banana_packages
            WHERE id = ?
            LIMIT 1
        ");
        $stmt->execute([$package_id]);
        $package = $stmt->fetch();

        if ($package) {

            $total_banana = $package['banana_amount'] + $package['bonus_banana'];

            $stmt = $pdo->prepare("
                UPDATE users
                SET banana_balance = banana_balance + ?
                WHERE telegram_id = ?
            ");
            $stmt->execute([$total_banana, $telegram_id]);

            $stmt = $pdo->prepare("
                INSERT INTO banana_transactions
                (user_id, amount, type, description)
                VALUES (?, ?, 'buy_with_stars', ?)
            ");
            $stmt->execute([
                $telegram_id,
                $total_banana,
                'خرید ' . $total_banana . ' Banana با ' . $package['star_price'] . ' استارز'
            ]);

            $text = "✅ پرداخت موفق!\n\n" .
                    "🍌 " . $total_banana . " Banana به حساب تو اضافه شد.\n\n" .
                    "💰 برای دیدن موجودی، دکمه 🍌 Banana رو بزن.";

            sendMessage($chat_id, $text, mainMenu());

        }

    }

    exit('OK');
}

/* =========================================================
   sendNextExploreProfile — با فیلتر seen_ids (جلوگیری از تکرار)
========================================================= */

function sendNextExploreProfile($pdo, $chat_id, $telegram_id, $gender_filter, $province_filter = null, $exclude_id = 0)
{
    // گرفتن لیست دیده‌شده‌های قبلی
    $seen = getSeenIds($pdo, $telegram_id);

    // اگر exclude_id داده شد، به لیست اضافه کن
    if ($exclude_id > 0) {
        $seen[] = (string)$exclude_id;
        $seen = array_unique($seen);
    }

    // ساخت کوئری
    $base_sql = "
        SELECT *
        FROM users
        WHERE telegram_id != ?
        AND is_blocked = 0
        AND name IS NOT NULL
    ";
    $base_params = [$telegram_id];

    if ($gender_filter !== null) {
        $base_sql .= " AND gender = ?";
        $base_params[] = $gender_filter;
    }

    if ($province_filter !== null) {
        $base_sql .= " AND province = ?";
        $base_params[] = $province_filter;
    }

    // اگر لیست seen خالی نبود، NOT IN اضافه کن
    $user = null;
    if (!empty($seen)) {
        $placeholders = implode(',', array_fill(0, count($seen), '?'));
        $sql = $base_sql . " AND telegram_id NOT IN ($placeholders) ORDER BY RAND() LIMIT 1";
        $params = array_merge($base_params, $seen);

        $stmt = $pdo->prepare($sql);
        $stmt->execute($params);
        $user = $stmt->fetch();
    } else {
        $sql = $base_sql . " ORDER BY RAND() LIMIT 1";
        $stmt = $pdo->prepare($sql);
        $stmt->execute($base_params);
        $user = $stmt->fetch();
    }

    // اگر خالی بود → یعنی همه را دیده → reset و از اول
    if (!$user) {
        resetSeenIds($pdo, $telegram_id);

        // دوباره بدون NOT IN (اگر exclude_id دادیم، فقط همون رو حذف کن)
        $sql = $base_sql . " ORDER BY RAND() LIMIT 1";
        $stmt = $pdo->prepare($sql);
        $stmt->execute($base_params);
        $user = $stmt->fetch();

        if (!$user) {
            sendMessage($chat_id, "🔎 کاربری با این فیلتر پیدا نشد.");
            return;
        }
    }

    // اضافه کردن کاربر فعلی به لیست دیده‌شده‌ها
    addSeenId($pdo, $telegram_id, $user['telegram_id']);

    // نمایش
    $location = '';
    if (!empty($user['province'])) {
        $location = $user['province'];
        if (!empty($user['city'])) {
            $location .= '، ' . $user['city'];
        }
    } elseif (!empty($user['city'])) {
        $location = $user['city'];
    } else {
        $location = 'نامشخص';
    }

    $caption =
        "👤 " . ($user['name'] ?? 'بی‌نام') . "\n" .
        "🎂 " . ($user['age'] ?? '؟') . " سال\n" .
        "📍 " . $location . "\n\n" .
        "📝 " . ($user['bio'] ?? 'توضیحی وارد نشده');

    $gender_code =
        ($gender_filter === 'زن') ? '1' :
        (($gender_filter === 'مرد') ? '2' : '0');

    $province_code = '0';
    if ($province_filter !== null) {
        $province_index = array_search($province_filter, getExploreProvinces(), true);
        if ($province_index !== false) {
            $province_code = (string)$province_index;
        }
    }

    $filter_code = $gender_code . '_' . $province_code;

    $keyboard = [
        'inline_keyboard' => [
            [
                [
                    'text' => '❤️ لایک',
                    'callback_data' => 'like_' . $user['telegram_id'] . '_' . $filter_code
                ],
                [
                    'text' => '❌ رد',
                    'callback_data' => 'skip_' . $user['telegram_id'] . '_' . $filter_code
                ]
            ],
            [
                [
                    'text' => '💬 دایرکت',
                    'callback_data' => 'dm_' . $user['telegram_id']
                ]
            ],
            [
                [
                    'text' => '⬅️ بازگشت',
                    'callback_data' => 'back_explore'
                ]
            ]
        ]
    ];

    if (!empty($user['photo']) && file_exists(__DIR__ . '/' . $user['photo'])) {
        sendPhoto($chat_id, $user['photo'], $caption, $keyboard);
    } else {
        sendMessage($chat_id, $caption, $keyboard);
    }
}

/* =========================================================
   CALLBACK QUERY
========================================================= */

if (isset($update['callback_query'])) {

    $callback = $update['callback_query'];

    $data = $callback['data'] ?? '';

    $chat_id = $callback['message']['chat']['id'];

    $telegram_id = $callback['from']['id'];

    $message_id = $callback['message']['message_id'];

    if (isUserBlocked($pdo, $telegram_id)) {
        telegram('answerCallbackQuery', [
            'callback_query_id' => $callback['id'],
            'text' => '⛔ دسترسی شما مسدود شده است.',
            'show_alert' => true
        ]);
        exit('OK');
    }

    updateLastSeen($pdo, $telegram_id);

    telegram('answerCallbackQuery', [
        'callback_query_id' => $callback['id']
    ]);


    /* =========================
       BANANA BUY (Stars)
    ========================= */

    if (strpos($data, 'banana_buy_') === 0) {

        $package_id = (int)substr($data, 11);

        $stmt = $pdo->prepare("
            SELECT *
            FROM banana_packages
            WHERE id = ?
            AND is_active = 1
            LIMIT 1
        ");
        $stmt->execute([$package_id]);
        $package = $stmt->fetch();

        if (!$package) {
            sendMessage($chat_id, "❌ این پکیج در دسترس نیست.");
            exit('OK');
        }

        $total_banana = $package['banana_amount'] + $package['bonus_banana'];

        telegram('sendInvoice', [
            'chat_id' => $chat_id,
            'title' => '🍌 خرید ' . $total_banana . ' Banana',
            'description' => 'با خرید این پکیج، ' . $total_banana . ' Banana به حساب شما اضافه می‌شود.',
            'payload' => 'banana_buy_' . $package['id'],
            'provider_token' => '',
            'currency' => 'XTR',
            'prices' => json_encode([
                [
                    'label' => $total_banana . ' Banana',
                    'amount' => $package['star_price']
                ]
            ], JSON_UNESCAPED_UNICODE)
        ]);

        exit('OK');
    }


    /* =========================
       RIAL BUY — نمایش متن هشدار
    ========================= */

    if (strpos($data, 'rial_buy_') === 0) {

        $package_id = (int)substr($data, 9);

        $stmt = $pdo->prepare("
            SELECT *
            FROM banana_packages
            WHERE id = ?
              AND is_active = 1
              AND price_toman IS NOT NULL
              AND price_toman > 0
            LIMIT 1
        ");
        $stmt->execute([$package_id]);
        $package = $stmt->fetch();

        if (!$package) {
            sendMessage($chat_id, "❌ این پکیج در دسترس نیست.");
            exit('OK');
        }

        $price_formatted = number_format($package['price_toman']);
        $banana_amount = $package['banana_amount'];

        $text = "🍌 خرید Banana\n\n" .
                "⭐ خرید با Stars (توصیه می‌شود):\n" .
                "   • سریع و مستقیم از تلگرام\n" .
                "   • به‌صرفه‌تر برای شما\n\n" .
                "💳 اگر اصرار داری با کارت پرداخت کنی:\n" .
                "   {$banana_amount} Banana = {$price_formatted} تومان + کارمزد درگاه\n" .
                "   (کاربر مبلغ نهایی شامل کارمزد را در صفحه پرداخت می‌بیند)";

        sendMessage(
            $chat_id,
            $text,
            [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '✅ ادامه و پرداخت',
                            'callback_data' => 'rial_confirm_' . $package['id']
                        ]
                    ],
                    [
                        [
                            'text' => '❌ لغو',
                            'callback_data' => 'rial_cancel_pkg'
                        ]
                    ]
                ]
            ]
        );

        exit('OK');
    }


    /* =========================
       RIAL CONFIRM — ساخت پرداخت
    ========================= */

    if (strpos($data, 'rial_confirm_') === 0) {

        $package_id = (int)substr($data, 13);

        $stmt = $pdo->prepare("
            SELECT *
            FROM banana_packages
            WHERE id = ?
              AND is_active = 1
              AND price_toman IS NOT NULL
              AND price_toman > 0
            LIMIT 1
        ");
        $stmt->execute([$package_id]);
        $package = $stmt->fetch();

        if (!$package) {
            sendMessage($chat_id, "❌ این پکیج در دسترس نیست.");
            exit('OK');
        }

        $order_id = 'rial_' . $telegram_id . '_' . time();

        $link = cubepay_create_link(
            (int)$package['price_toman'],
            $order_id,
            'https://cubevps.ir/smspay/',
            'خرید ' . $package['banana_amount'] . ' Banana'
        );

        if (!$link || empty($link['payment_link']) || empty($link['authority'])) {
            sendMessage(
                $chat_id,
                "❌ خطا در ارتباط با درگاه پرداخت.\n\n" .
                "لطفاً چند لحظه بعد دوباره تلاش کن."
            );
            exit('OK');
        }

        $authority = $link['authority'];
        $payment_link = $link['payment_link'];
        $pay_amount_toman = (int)($link['pay_amount_toman'] ?? $package['price_toman']);

        $stmt = $pdo->prepare("
            INSERT INTO rial_payments
            (user_id, order_id, amount_toman, banana_amount, status, payment_url, authority)
            VALUES (?, ?, ?, ?, 'pending', ?, ?)
        ");
        $stmt->execute([
            $telegram_id,
            $order_id,
            $pay_amount_toman,
            $package['banana_amount'],
            $payment_link,
            $authority
        ]);

        $pay_formatted = number_format($pay_amount_toman);
        $banana_amount = $package['banana_amount'];

        $text = "💳 پرداخت {$pay_formatted} تومان\n\n" .
                "🍌 {$banana_amount} Banana\n\n" .
                "⚠️ مبلغ شامل کارمزد درگاه است.\n\n" .
                "👇 روی دکمه زیر بزن و پرداخت رو کامل کن.\n\n" .
                "بعد از پرداخت، حتماً برگرد و دکمه «✅ پرداخت کردم» رو بزن.";

        sendMessage(
            $chat_id,
            $text,
            [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '💳 رفتن به صفحه پرداخت',
                            'url' => $payment_link
                        ]
                    ],
                    [
                        [
                            'text' => '✅ پرداخت کردم، بررسی کن',
                            'callback_data' => 'rial_check_' . $order_id
                        ]
                    ],
                    [
                        [
                            'text' => '❌ لغو',
                            'callback_data' => 'rial_cancel_' . $order_id
                        ]
                    ]
                ]
            ]
        );

        exit('OK');
    }


    /* =========================
       RIAL CHECK — بررسی وضعیت
    ========================= */

    if (strpos($data, 'rial_check_') === 0) {

        $order_id = substr($data, 11);

        $stmt = $pdo->prepare("
            SELECT *
            FROM rial_payments
            WHERE order_id = ?
              AND user_id = ?
            LIMIT 1
        ");
        $stmt->execute([$order_id, $telegram_id]);
        $pay = $stmt->fetch();

        if (!$pay) {
            sendMessage($chat_id, "❌ سفارش پیدا نشد.");
            exit('OK');
        }

        if ($pay['status'] === 'verified') {
            sendMessage($chat_id, "✅ این پرداخت قبلاً تایید شده و Banana به حسابت اضافه شده.");
            exit('OK');
        }

        if (in_array($pay['status'], ['expired', 'failed', 'canceled'], true)) {
            sendMessage($chat_id, "❌ این پرداخت منقضی یا ناموفق شده. لطفاً دوباره تلاش کن.");
            exit('OK');
        }

        if (empty($pay['authority'])) {
            sendMessage($chat_id, "❌ خطا: اطلاعات پرداخت ناقص است.");
            exit('OK');
        }

        $verify = cubepay_verify_payment($pay['authority']);
        $status = $verify['status'] ?? '';

        if (!empty($verify['success']) && $status === 'verified') {

            $result = cubepay_deliver_banana($pdo, $pay['id']);

            if (!empty($result['success'])) {
                $pay_formatted = number_format($result['amount_toman']);
                sendMessage(
                    $chat_id,
                    "✅ پرداخت تایید شد!\n\n" .
                    "🍌 {$result['banana_amount']} Banana به حسابت اضافه شد.\n" .
                    "💵 مبلغ پرداختی: {$pay_formatted} تومان\n\n" .
                    "موجودیت رو با دکمه 🍌 Banana ببین.",
                    mainMenu()
                );
            } else {
                sendMessage($chat_id, "⚠️ خطا در تحویل. لطفاً با پشتیبانی تماس بگیر.");
            }
            exit('OK');
        }

        if ($status === 'pending' || empty($verify['success'])) {
            sendMessage(
                $chat_id,
                "⏳ پرداخت شما هنوز تایید نشده.\n\n" .
                "اگر پرداخت کردی، ۳۰ ثانیه صبر کن و دوباره بزن.\n" .
                "اگر پرداخت نکردی، روی «💳 رفتن به صفحه پرداخت» بزن.",
                [
                    'inline_keyboard' => [
                        [
                            [
                                'text' => '🔄 دوباره بررسی کن',
                                'callback_data' => 'rial_check_' . $order_id
                            ]
                        ]
                    ]
                ]
            );
            exit('OK');
        }

        if ($status === 'expired' || $status === 'failed') {
            $stmt = $pdo->prepare("UPDATE rial_payments SET status = ? WHERE id = ?");
            $stmt->execute([$status, $pay['id']]);

            sendMessage(
                $chat_id,
                "❌ پرداخت ناموفق یا منقضی شد.\n\n" .
                "برای تلاش مجدد، دوباره از منوی 🍌 Banana شروع کن.",
                mainMenu()
            );
            exit('OK');
        }

        sendMessage(
            $chat_id,
            "⏳ وضعیت پرداخت هنوز مشخص نیست.\n\n" .
            "چند لحظه دیگه دوباره امتحان کن.",
            [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '🔄 بررسی مجدد',
                            'callback_data' => 'rial_check_' . $order_id
                        ]
                    ]
                ]
            ]
        );

        exit('OK');
    }


    /* =========================
       RIAL CANCEL
    ========================= */

    if ($data === 'rial_cancel_pkg') {
        sendMessage($chat_id, "❌ پرداخت لغو شد.", mainMenu());
        exit('OK');
    }

    if (strpos($data, 'rial_cancel_') === 0) {

        $order_id = substr($data, 12);

        $stmt = $pdo->prepare("
            UPDATE rial_payments
            SET status = 'canceled'
            WHERE order_id = ?
              AND user_id = ?
              AND status = 'pending'
        ");
        $stmt->execute([$order_id, $telegram_id]);

        sendMessage($chat_id, "❌ پرداخت لغو شد.", mainMenu());
        exit('OK');
    }


    /* =========================
       BOOST CONFIRM
    ========================= */

    if ($data === 'boost_confirm') {

        $stmt = $pdo->prepare("
            SELECT banana_balance
            FROM users
            WHERE telegram_id = ?
            LIMIT 1
        ");
        $stmt->execute([$telegram_id]);
        $user_boost = $stmt->fetch();

        $balance = $user_boost['banana_balance'] ?? 0;

        if ($balance < 50) {
            sendMessage(
                $chat_id,
                "❌ موجودی Banana کافی نیست!\n\n" .
                "💰 موجودی: " . $balance . " Banana\n" .
                "💵 هزینه: ۵۰ Banana",
                mainMenu()
            );
            exit('OK');
        }

        $stmt = $pdo->prepare("
            UPDATE users
            SET
                banana_balance = banana_balance - 50,
                boost_expiry = DATE_ADD(NOW(), INTERVAL 7 DAY)
            WHERE telegram_id = ?
        ");
        $stmt->execute([$telegram_id]);

        $stmt = $pdo->prepare("
            INSERT INTO banana_transactions
            (user_id, amount, type, description)
            VALUES (?, ?, 'boost_purchase', 'خرید Boost ۷ روزه')
        ");
        $stmt->execute([$telegram_id, -50]);

        sendMessage(
            $chat_id,
            "🚀 Boost فعال شد!\n\n" .
            "✅ پروفایلت به مدت ۷ روز بالای همه نمایش داده میشه.\n\n" .
            "💰 موجودی جدید: " . ($balance - 50) . " Banana",
            mainMenu()
        );

        exit('OK');
    }


    /* =========================
       PREMIUM CONFIRM
    ========================= */

    if ($data === 'premium_confirm') {

        $stmt = $pdo->prepare("
            SELECT banana_balance
            FROM users
            WHERE telegram_id = ?
            LIMIT 1
        ");
        $stmt->execute([$telegram_id]);
        $user_premium = $stmt->fetch();

        $balance = $user_premium['banana_balance'] ?? 0;

        if ($balance < 60) {
            sendMessage(
                $chat_id,
                "❌ موجودی Banana کافی نیست!\n\n" .
                "💰 موجودی: " . $balance . " Banana\n" .
                "💵 هزینه: ۶۰ Banana",
                mainMenu()
            );
            exit('OK');
        }

        $stmt = $pdo->prepare("
            UPDATE users
            SET
                banana_balance = banana_balance - 60,
                premium_expiry = DATE_ADD(NOW(), INTERVAL 7 DAY)
            WHERE telegram_id = ?
        ");
        $stmt->execute([$telegram_id]);

        $stmt = $pdo->prepare("
            INSERT INTO banana_transactions
            (user_id, amount, type, description)
            VALUES (?, ?, 'premium_purchase', 'خرید اشتراک پرمیوم ۷ روزه')
        ");
        $stmt->execute([$telegram_id, -60]);

        sendMessage(
            $chat_id,
            "💎 پرمیوم فعال شد!\n\n" .
            "✅ به مدت ۷ روز می‌تونی به بقیه پیام دایرکت بدی.\n\n" .
            "💰 موجودی جدید: " . ($balance - 60) . " Banana",
            mainMenu()
        );

        exit('OK');
    }


    /* =========================
       REFERRAL SHOW
    ========================= */

    if ($data === 'referral_show') {

        $stmt = $pdo->prepare("
            SELECT referral_code
            FROM users
            WHERE telegram_id = ?
            LIMIT 1
        ");
        $stmt->execute([$telegram_id]);
        $me = $stmt->fetch();

        $ref_code = $me['referral_code'] ?? $telegram_id;

        $stmt = $pdo->prepare("
            SELECT COUNT(*) as cnt
            FROM users
            WHERE referred_by = ?
        ");
        $stmt->execute([$telegram_id]);
        $invited = $stmt->fetch();

        $invited_count = $invited['cnt'] ?? 0;
        $earned_banana = $invited_count * 10;

        $ref_link = "https://t.me/monkeydatebot?start=ref_" . $ref_code;

        $text_ref = "🎁 دعوت دوستان\n\n" .
                    "🔗 لینک اختصاصی تو:\n" .
                    "`" . $ref_link . "`\n\n" .
                    "📊 آمار تو:\n" .
                    "• تعداد دعوت‌شده: " . $invited_count . " نفر\n" .
                    "• Banana کسب‌شده: " . $earned_banana . " عدد\n\n" .
                    "💡 هر کی با لینک تو بیاد و پروفایلش رو کامل کنه،\n" .
                    "تو ۱۰ Banana هدیه می‌گیری! 🍌\n\n" .
                    "📋 برای کپی، روی لینک بزن:";

        sendMessage(
            $chat_id,
            $text_ref,
            [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '📤 اشتراک‌گذاری لینک',
                            'url' => 'https://t.me/share/url?url=' . urlencode($ref_link) . '&text=' . urlencode('بیا توی مانکی گپ ثبت‌نام کن! 🐒')
                        ]
                    ]
                ]
            ]
        );

        exit('OK');
    }


    /* =========================
       PROVINCE SELECT
    ========================= */

    if (strpos($data, 'province_sel_') === 0) {

        $province_index = (int)substr($data, 13);
        $province = getProvinceByIndex($province_index);

        if (!$province) {
            sendMessage($chat_id, "❌ استان نامعتبر");
            exit('OK');
        }

        $stmt = $pdo->prepare("
            UPDATE users
            SET province = ?
            WHERE telegram_id = ?
        ");
        $stmt->execute([$province, $telegram_id]);

        $stmt = $pdo->prepare("
            SELECT edit_mode
            FROM users
            WHERE telegram_id = ?
            LIMIT 1
        ");
        $stmt->execute([$telegram_id]);
        $user_check = $stmt->fetch();

        $current_mode = $user_check['edit_mode'] ?? null;

        if ($current_mode === 'province_signup') {
            $stmt = $pdo->prepare("
                UPDATE users
                SET edit_mode = 'city_signup'
                WHERE telegram_id = ?
            ");
            $stmt->execute([$telegram_id]);

            sendMessage(
                $chat_id,
                "✅ استان: " . $province . "\n\n" .
                "🏙 حالا شهرت رو وارد کن:",
                ['remove_keyboard' => true]
            );

            exit('OK');
        }

        if ($current_mode === 'province_edit') {
            $stmt = $pdo->prepare("
                UPDATE users
                SET edit_mode = NULL
                WHERE telegram_id = ?
            ");
            $stmt->execute([$telegram_id]);

            sendMessage(
                $chat_id,
                "✅ استان با موفقیت تغییر کرد: " . $province,
                mainMenu()
            );

            exit('OK');
        }

        exit('OK');
    }


    /* =========================
       PROVINCE PAGE NAV
    ========================= */

    if (strpos($data, 'province_page_') === 0) {

        $page = (int)substr($data, 14);

        if ($page < 1) $page = 1;

        $keyboard = json_encode(
            provinceKeyboard($page),
            JSON_UNESCAPED_UNICODE
        );

        telegram('editMessageReplyMarkup', [
            'chat_id' => $chat_id,
            'message_id' => $message_id,
            'reply_markup' => $keyboard
        ]);

        exit('OK');
    }


    /* =========================
       NOOP
    ========================= */

    if ($data === 'noop') {
        exit('OK');
    }


    /* =========================
       EDIT PROVINCE
    ========================= */

    if ($data === 'edit_province') {

        $stmt = $pdo->prepare("
            UPDATE users
            SET edit_mode = 'province_edit'
            WHERE telegram_id = ?
        ");
        $stmt->execute([$telegram_id]);

        sendMessage(
            $chat_id,
            "📍 استان جدیدت رو انتخاب کن:",
            provinceKeyboard(1)
        );

        exit('OK');
    }


    /* =========================
       DM (DIRECT MESSAGE)
       پرمیوم فقط برای شروع چت جدید؛ پاسخ دادن پرمیوم لازم ندارد
    ========================= */

    if (strpos($data, 'dm_') === 0) {

        $target_id = (int)substr($data, 3);

        if ($target_id <= 0 || $target_id == $telegram_id) {
            exit('OK');
        }

        // آیا این کاربر قبلاً از طرف مقابل پیامی دریافت کرده؟
        $stmt = $pdo->prepare("
            SELECT id
            FROM direct_messages
            WHERE from_user = ?
              AND to_user = ?
            LIMIT 1
        ");
        $stmt->execute([$target_id, $telegram_id]);
        $has_received_from_target = $stmt->fetch();

        // بررسی پرمیوم
        $stmt = $pdo->prepare("
            SELECT premium_expiry
            FROM users
            WHERE telegram_id = ?
            LIMIT 1
        ");
        $stmt->execute([$telegram_id]);
        $me = $stmt->fetch();

        $premium_active = false;
        if (!empty($me['premium_expiry'])) {
            if (strtotime($me['premium_expiry']) > time()) {
                $premium_active = true;
            }
        }

        // اگر نه پرمیوم دارد و نه پیام قبلی از طرف مقابل دارد → رد
        if (!$has_received_from_target && !$premium_active) {

            sendMessage(
                $chat_id,
                "💎 برای شروع چت جدید، باید اشتراک پرمیوم داشته باشی.\n\n" .
                "💰 هزینه: ۶۰ Banana (۷ روز)\n\n" .
                "از دکمه «💎 اشتراک پرمیوم» توی منوی اصلی استفاده کن.",
                mainMenu()
            );

            exit('OK');
        }

        $stmt = $pdo->prepare("
            UPDATE users
            SET edit_mode = ?
            WHERE telegram_id = ?
        ");
        $stmt->execute(['chat_with_' . $target_id, $telegram_id]);

        sendMessage(
            $chat_id,
            "💬 چت شروع شد!\n\n" .
            "پیامت رو بفرست:",
            [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '❌ بستن چت',
                            'callback_data' => 'close_chat'
                        ]
                    ]
                ]
            ]
        );

        exit('OK');
    }


    /* =========================
       CLOSE CHAT
    ========================= */

    if ($data === 'close_chat') {

        $stmt = $pdo->prepare("
            UPDATE users
            SET edit_mode = NULL
            WHERE telegram_id = ?
        ");
        $stmt->execute([$telegram_id]);

        sendMessage(
            $chat_id,
            "✅ چت بسته شد.",
            mainMenu()
        );

        exit('OK');
    }


    /* =========================
       OPEN CHAT (from Chat List)
       پرمیوم فقط برای شروع چت جدید؛ پاسخ دادن پرمیوم لازم ندارد
    ========================= */

    if (strpos($data, 'open_chat_') === 0) {

        $partner_id = (int)substr($data, 10);

        if ($partner_id <= 0 || $partner_id == $telegram_id) {
            exit('OK');
        }

        // آیا این کاربر قبلاً از طرف مقابل پیامی دریافت کرده؟
        $stmt = $pdo->prepare("
            SELECT id
            FROM direct_messages
            WHERE from_user = ?
              AND to_user = ?
            LIMIT 1
        ");
        $stmt->execute([$partner_id, $telegram_id]);
        $has_received_from_partner = $stmt->fetch();

        // بررسی پرمیوم
        $stmt = $pdo->prepare("
            SELECT premium_expiry
            FROM users
            WHERE telegram_id = ?
            LIMIT 1
        ");
        $stmt->execute([$telegram_id]);
        $me = $stmt->fetch();

        $premium_active = false;
        if (!empty($me['premium_expiry'])) {
            if (strtotime($me['premium_expiry']) > time()) {
                $premium_active = true;
            }
        }

        // اگر نه پرمیوم دارد و نه پیام قبلی از طرف مقابل دارد → رد
        if (!$has_received_from_partner && !$premium_active) {
            sendMessage(
                $chat_id,
                "💎 برای شروع چت جدید، باید اشتراک پرمیوم داشته باشی.\n\n" .
                "💰 هزینه: ۶۰ Banana (۷ روز)\n\n" .
                "از دکمه «💎 اشتراک پرمیوم» توی منوی اصلی استفاده کن.",
                mainMenu()
            );
            exit('OK');
        }

        $stmt = $pdo->prepare("
            UPDATE users
            SET edit_mode = ?
            WHERE telegram_id = ?
        ");
        $stmt->execute(['chat_with_' . $partner_id, $telegram_id]);

        sendMessage(
            $chat_id,
            "💬 ادامه چت!\n\n" .
            "پیامت رو بفرست:",
            [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '❌ بستن چت',
                            'callback_data' => 'close_chat'
                        ]
                    ]
                ]
            ]
        );

        exit('OK');
    }


    /* =========================
       START CHAT FROM MATCH
    ========================= */

    if (strpos($data, 'match_start_') === 0) {

        $target_id = (int)substr($data, 12);

        if ($target_id <= 0 || $target_id == $telegram_id) {
            exit;
        }

        $stmt = $pdo->prepare("
            SELECT id
            FROM likes
            WHERE liker_id = ? AND liked_id = ?
            LIMIT 1
        ");
        $stmt->execute([$telegram_id, $target_id]);
        $my_like = $stmt->fetch();

        $stmt = $pdo->prepare("
            SELECT id
            FROM likes
            WHERE liker_id = ? AND liked_id = ?
            LIMIT 1
        ");
        $stmt->execute([$target_id, $telegram_id]);
        $their_like = $stmt->fetch();

        if (!$my_like || !$their_like) {
            sendMessage($telegram_id, "❌ این مچ دیگر فعال نیست.");
            exit;
        }

        $stmt = $pdo->prepare("SELECT is_blocked FROM users WHERE telegram_id = ? LIMIT 1");
        $stmt->execute([$target_id]);
        $target_user = $stmt->fetch();
        if (!$target_user || (int)$target_user['is_blocked'] === 1) {
            sendMessage($telegram_id, "❌ این پروفایل دیگر در دسترس نیست.");
            exit;
        }

        $stmt = $pdo->prepare("
            SELECT *
            FROM quick_chat_rooms
            WHERE
                (user1_id = ? AND user2_id = ?)
                OR
                (user1_id = ? AND user2_id = ?)
            LIMIT 1
        ");
        $stmt->execute([$telegram_id, $target_id, $target_id, $telegram_id]);
        $room = $stmt->fetch();

        if (!$room) {
            $stmt = $pdo->prepare("
                INSERT INTO quick_chat_rooms
                (user1_id, user2_id)
                VALUES (?, ?)
            ");
            $stmt->execute([$telegram_id, $target_id]);
        }

        sendMessage(
            $telegram_id,
            "💬 چت شروع شد!\n\nپیامت رو بفرست.",
            chatKeyboard()
        );

        sendMessage(
            $target_id,
            "💬 چت شروع شد!\n\nپیامت رو بفرست.",
            chatKeyboard()
        );

        exit;
    }



    /* =========================
       EXPLORE PROVINCE SELECT
    ========================= */

    if (strpos($data, 'explore_province_sel_') === 0) {

        $parts = explode('_', $data);
        $province_index = (int)($parts[3] ?? -1);
        $gender_code = $parts[4] ?? '0';

        $province = getExploreProvinceByIndex($province_index);

        if ($province === null) {
            sendMessage($chat_id, "❌ استان نامعتبر است.");
            exit('OK');
        }

        $gender_filter =
            ($gender_code === '1') ? 'زن' :
            (($gender_code === '2') ? 'مرد' : null);

        sendNextExploreProfile(
            $pdo,
            $chat_id,
            $telegram_id,
            $gender_filter,
            $province,
            0
        );

        exit('OK');
    }


    /* =========================
       EXPLORE ALL PROVINCES
    ========================= */

    if (strpos($data, 'explore_province_all_') === 0) {

        $gender_code = substr($data, strlen('explore_province_all_'));

        $gender_filter =
            ($gender_code === '1') ? 'زن' :
            (($gender_code === '2') ? 'مرد' : null);

        sendNextExploreProfile(
            $pdo,
            $chat_id,
            $telegram_id,
            $gender_filter,
            null,
            0
        );

        exit('OK');
    }


    /* =========================
       EXPLORE PROVINCE PAGE
    ========================= */

    if (strpos($data, 'explore_province_page_') === 0) {

        $parts = explode('_', $data);
        $page = (int)($parts[3] ?? 1);
        $gender_code = $parts[4] ?? '0';

        if ($page < 1) $page = 1;

        telegram('editMessageReplyMarkup', [
            'chat_id' => $chat_id,
            'message_id' => $message_id,
            'reply_markup' => json_encode(
                exploreProvinceKeyboard($gender_code, $page),
                JSON_UNESCAPED_UNICODE
            )
        ]);

        exit('OK');
    }


    /* =========================
       LIKE
    ========================= */

    if (strpos($data, 'like_') === 0) {

        $target_id = (int)substr($data, 5);

        $parts = explode('_', $data);
        $gender_code = $parts[2] ?? '0';
        $province_code = $parts[3] ?? '0';
        $gender_filter =
            ($gender_code === '1') ? 'زن' :
            (($gender_code === '2') ? 'مرد' : null);
        $province_filter = null;
        if (ctype_digit($province_code) && (int)$province_code > 0) {
            $province_filter = getExploreProvinceByIndex((int)$province_code - 1);
        }

        if ($target_id <= 0 || $target_id == $telegram_id) {
            exit;
        }

        $stmt = $pdo->prepare("
            INSERT IGNORE INTO likes
            (liker_id, liked_id)
            VALUES (?, ?)
        ");
        $stmt->execute([$telegram_id, $target_id]);

        $stmt = $pdo->prepare("
            SELECT id
            FROM likes
            WHERE liker_id = ? AND liked_id = ?
            LIMIT 1
        ");
        $stmt->execute([$target_id, $telegram_id]);

        if ($stmt->fetch()) {

            sendMessage(
                $telegram_id,
                "🎉 مچ شدید!\n\n❤️ شما و این شخص همدیگر را لایک کرده‌اید.\n\nاگر مایل هستی می‌تونی چت رو شروع کنی.",
                [
                    'inline_keyboard' => [
                        [
                            [
                                'text' => '💬 شروع چت',
                                'callback_data' => 'match_start_' . $target_id
                            ]
                        ]
                    ]
                ]
            );

            sendMessage(
                $target_id,
                "🎉 مچ شدید!\n\n❤️ شما و این شخص همدیگر را لایک کرده‌اید.\n\nاگر مایل هستی می‌تونی چت رو شروع کنی.",
                [
                    'inline_keyboard' => [
                        [
                            [
                                'text' => '💬 شروع چت',
                                'callback_data' => 'match_start_' . $telegram_id
                            ]
                        ]
                    ]
                ]
            );

        } else {

            sendMessage(
                $telegram_id,
                "❤️ لایک شد!\n\nاگر طرف مقابل هم تو رو لایک کنه، مچ می‌شید ❤️\nاون موقع می‌تونید با هم چت کنید. 💬"
            );
        }

        sendNextExploreProfile(
            $pdo,
            $chat_id,
            $telegram_id,
            $gender_filter,
            $province_filter,
            $target_id
        );

        exit;
    }


    /* =========================
       EDIT PROFILE
    ========================= */

    if ($data === 'edit_profile') {

        $edit_text =
            "✏️ ویرایش پروفایل\n\nکدام بخش را می‌خواهی تغییر بدهی؟";

        $edit_markup =
            json_encode(
                editKeyboard(),
                JSON_UNESCAPED_UNICODE
            );


        if (isset($callback['message']['photo'])) {

            telegram('editMessageCaption', [
                'chat_id' => $chat_id,
                'message_id' => $message_id,
                'caption' => $edit_text,
                'reply_markup' => $edit_markup
            ]);

        } else {

            telegram('editMessageText', [
                'chat_id' => $chat_id,
                'message_id' => $message_id,
                'text' => $edit_text,
                'reply_markup' => $edit_markup
            ]);
        }

        exit('OK');
    }



    /* =========================
       EDIT NAME
    ========================= */

    if ($data === 'edit_name') {

        $stmt = $pdo->prepare("
            UPDATE users
            SET edit_mode = 'name_edit'
            WHERE telegram_id = ?
        ");

        $stmt->execute([
            $telegram_id
        ]);


        sendMessage(
            $chat_id,
            "✏️ اسم جدیدت را ارسال کن:"
        );

        exit('OK');
    }



    /* =========================
       EDIT PHOTO
    ========================= */

    if ($data === 'edit_photo') {

        $stmt = $pdo->prepare("
            UPDATE users
            SET edit_mode = 'photo_edit'
            WHERE telegram_id = ?
        ");

        $stmt->execute([
            $telegram_id
        ]);


        sendMessage(
            $chat_id,
            "📸 عکس جدیدت را ارسال کن:"
        );

        exit('OK');
    }



    /* =========================
       EDIT CITY
    ========================= */

    if ($data === 'edit_city') {

        $stmt = $pdo->prepare("
            UPDATE users
            SET edit_mode = 'city_edit'
            WHERE telegram_id = ?
        ");

        $stmt->execute([
            $telegram_id
        ]);


        sendMessage(
            $chat_id,
            "🏙 شهر جدیدت را ارسال کن:"
        );

        exit('OK');
    }



    /* =========================
       EDIT BIO
    ========================= */

    if ($data === 'edit_bio') {

        $stmt = $pdo->prepare("
            UPDATE users
            SET edit_mode = 'bio_edit'
            WHERE telegram_id = ?
        ");

        $stmt->execute([
            $telegram_id
        ]);


        sendMessage(
            $chat_id,
            "📝 توضیحات جدیدت را ارسال کن:"
        );

        exit('OK');
    }



    /* =========================
       BACK TO PROFILE
    ========================= */

    if ($data === 'back_profile') {

        $stmt = $pdo->prepare("
            SELECT *
            FROM users
            WHERE telegram_id = ?
            LIMIT 1
        ");

        $stmt->execute([
            $telegram_id
        ]);

        $profile = $stmt->fetch();


        if (!$profile) {

            sendMessage(
                $chat_id,
                "پروفایل پیدا نشد."
            );

            exit('OK');
        }


        $location = '';
        if (!empty($profile['province'])) {
            $location = $profile['province'];
            if (!empty($profile['city'])) {
                $location .= '، ' . $profile['city'];
            }
        } elseif (!empty($profile['city'])) {
            $location = $profile['city'];
        } else {
            $location = 'نامشخص';
        }

        $caption =
            "👤 پروفایل من\n\n" .
            "اسم: " . ($profile['name'] ?? '-') . "\n" .
            "🎂 سن: " . ($profile['age'] ?? '-') . "\n" .
            "📍 " . $location . "\n" .
            "⚧ جنسیت: " . ($profile['gender'] ?? '-') . "\n\n" .
            "📝 درباره من:\n" .
            ($profile['bio'] ?? '-');


        if (
            !empty($profile['photo']) &&
            file_exists(__DIR__ . '/' . $profile['photo'])
        ) {

            telegram('editMessageCaption', [
                'chat_id' => $chat_id,
                'message_id' => $message_id,
                'caption' => $caption,
                'reply_markup' => json_encode(
                    profileKeyboard(),
                    JSON_UNESCAPED_UNICODE
                )
            ]);

        } else {

            telegram('editMessageText', [
                'chat_id' => $chat_id,
                'message_id' => $message_id,
                'text' => $caption,
                'reply_markup' => json_encode(
                    profileKeyboard(),
                    JSON_UNESCAPED_UNICODE
                )
            ]);
        }

        exit('OK');
    }



    /* =========================
       EXPLORE SKIP
    ========================= */

    if ($data === 'skip' || strpos($data, 'skip_') === 0) {

        $parts = explode('_', $data);

        $exclude_id = ($data === 'skip')
            ? 0
            : (int)($parts[1] ?? 0);

        $gender_code = ($data === 'skip')
            ? '0'
            : ($parts[2] ?? '0');

        $province_code = ($data === 'skip')
            ? '0'
            : ($parts[3] ?? '0');

        $gender_filter =
            ($gender_code === '1') ? 'زن' :
            (($gender_code === '2') ? 'مرد' : null);

        $province_filter = null;
        if (ctype_digit($province_code) && (int)$province_code > 0) {
            $province_filter = getExploreProvinceByIndex((int)$province_code - 1);
        }

        sendNextExploreProfile(
            $pdo,
            $chat_id,
            $telegram_id,
            $gender_filter,
            $province_filter,
            $exclude_id
        );

        exit('OK');
    }


    /* =========================
       EXPLORE BACK
    ========================= */

    if ($data === 'back_explore') {

        sendMessage(
            $chat_id,
            "🔙 منوی اصلی",
            mainMenu()
        );

        exit('OK');
    }


    exit('OK');
}



/* =========================================================
   MESSAGE
========================================================= */

if (!isset($update['message'])) {
    exit('OK');
}

$message = $update['message'];

$chat_id = $message['chat']['id'];

$telegram_id = $message['from']['id'];

$username = $message['from']['username'] ?? null;

$text = trim($message['text'] ?? '');

if (isUserBlocked($pdo, $telegram_id)) {
    denyBlockedUser($chat_id);
}

updateLastSeen($pdo, $telegram_id);


/* =========================
   GET PROFILE
========================= */

$stmt = $pdo->prepare("
    SELECT *
    FROM users
    WHERE telegram_id = ?
    LIMIT 1
");

$stmt->execute([
    $telegram_id
]);

$profile = $stmt->fetch();


/* =========================================================
   CHAT ROOM HELPERS
========================================================= */

$current_room = getCurrentRoom($pdo, $telegram_id);


/* =========================
   CHAT: END
========================= */

if ($text === '❌ پایان چت') {

    if (!$current_room) {

        sendMessage(
            $chat_id,
            "❌ در حال حاضر داخل چتی نیستی.",
            mainMenu()
        );

        exit('OK');
    }


    $partner_id =
        ($current_room['user1_id'] == $telegram_id)
        ? $current_room['user2_id']
        : $current_room['user1_id'];


    $stmt = $pdo->prepare("
        DELETE FROM quick_chat_rooms
        WHERE id = ?
    ");

    $stmt->execute([
        $current_room['id']
    ]);


    sendMessage(
        $chat_id,
        "❌ چت پایان یافت.",
        mainMenu()
    );


    sendMessage(
        $partner_id,
        "❌ طرف مقابل چت را پایان داد.",
        mainMenu()
    );

    exit('OK');
}


/* =========================
   CHAT: VIEW PARTNER PROFILE
========================= */
if ($text === '👤 مشاهده پروفایل') {
    if (!$current_room) {
        sendMessage($chat_id, "❌ در حال حاضر داخل چتی نیستی.", mainMenu());
        exit('OK');
    }
    $partner_id = ($current_room['user1_id'] == $telegram_id) ? $current_room['user2_id'] : $current_room['user1_id'];
    $stmt = $pdo->prepare("SELECT * FROM users WHERE telegram_id = ? AND is_blocked = 0 LIMIT 1");
    $stmt->execute([$partner_id]);
    $partner = $stmt->fetch();
    if (!$partner) {
        sendMessage($chat_id, "❌ پروفایل طرف مقابل پیدا نشد.", chatKeyboard());
        exit('OK');
    }
    $caption = profileCaption($partner, '👤 پروفایل طرف مقابل');
    if (!empty($partner['photo']) && file_exists(__DIR__ . '/' . $partner['photo'])) {
        sendPhoto($chat_id, $partner['photo'], $caption, chatKeyboard());
    } else {
        sendMessage($chat_id, $caption, chatKeyboard());
    }
    exit('OK');
}


/* =========================================================
   START
========================================================= */

if ($text === '/start' || strpos($text, '/start ') === 0) {

    $referrer_id = null;

    if (strpos($text, '/start ref_') === 0) {

        $ref_code = substr($text, 11);

        $stmt = $pdo->prepare("
            SELECT telegram_id
            FROM users
            WHERE telegram_id = ?
            LIMIT 1
        ");
        $stmt->execute([$ref_code]);
        $referrer = $stmt->fetch();

        if ($referrer && $referrer['telegram_id'] != $telegram_id) {
            $referrer_id = (int)$referrer['telegram_id'];
        }
    }

    if ($profile) {

        // بررسی: آیا ثبت‌نام کاربر کامل است؟
        $is_signup_complete = !empty($profile['name'])
                            && !empty($profile['gender'])
                            && !empty($profile['age']);

        if ($is_signup_complete) {
            // ثبت‌نام کامل → mainMenu
            $stmt = $pdo->prepare("UPDATE users SET edit_mode = NULL WHERE telegram_id = ?");
            $stmt->execute([$telegram_id]);

            sendMessage(
                $chat_id,
                "👋 خوش برگشتی!",
                mainMenu()
            );

            exit('OK');
        }

        // ثبت‌نام ناقص → پیام مناسب بر اساس مرحله فعلی
        $current_mode = $profile['edit_mode'] ?? null;

        if ($current_mode === 'gender_signup' || empty($profile['gender'])) {
            sendMessage($chat_id, "لطفا جنسیت خود را انتخاب کنید:", genderKeyboard());
        } elseif ($current_mode === 'name_signup' || empty($profile['name'])) {
            sendMessage($chat_id, "👤 اسمت رو وارد کن:", ['remove_keyboard' => true]);
        } elseif ($current_mode === 'age_signup' || empty($profile['age'])) {
            sendMessage($chat_id, "🎂 سنت رو وارد کن:", ['remove_keyboard' => true]);
        } elseif ($current_mode === 'province_signup' || empty($profile['province'])) {
            sendMessage($chat_id, "📍 استان خودت رو انتخاب کن:", provinceKeyboard(1));
        } elseif ($current_mode === 'city_signup') {
            sendMessage($chat_id, "🏙 شهرت رو وارد کن:", ['remove_keyboard' => true]);
        } elseif ($current_mode === 'photo_signup') {
            sendMessage($chat_id, "📸 حالا یک عکس از خودت بفرست:", ['remove_keyboard' => true]);
        } elseif ($current_mode === 'bio_signup') {
            sendMessage($chat_id, "📝 یه توضیح کوتاه درباره خودت بنویس:", ['remove_keyboard' => true]);
        } else {
            // همه چیز پر است ولی edit_mode NULL نشده — پاکش کن
            $stmt = $pdo->prepare("UPDATE users SET edit_mode = NULL WHERE telegram_id = ?");
            $stmt->execute([$telegram_id]);
            sendMessage($chat_id, "👋 خوش برگشتی!", mainMenu());
        }

        exit('OK');
    }

    $my_ref_code = $telegram_id;

    if ($referrer_id) {
        $stmt = $pdo->prepare("
            INSERT INTO users
            (
                telegram_id,
                username,
                edit_mode,
                referral_code,
                referred_by
            )
            VALUES (?, ?, 'gender_signup', ?, ?)
        ");
        $stmt->execute([
            $telegram_id,
            $username,
            $my_ref_code,
            $referrer_id
        ]);
    } else {
        $stmt = $pdo->prepare("
            INSERT INTO users
            (
                telegram_id,
                username,
                edit_mode,
                referral_code
            )
            VALUES (?, ?, 'gender_signup', ?)
        ");
        $stmt->execute([
            $telegram_id,
            $username,
            $my_ref_code
        ]);
    }

    if ($referrer_id) {
        sendMessage(
            $chat_id,
            "🎉 سلام به ربات مانکی خوش آمدید 🐒❤️\n\n" .
            "🎁 یک دوست تو رو به اینجا دعوت کرده!\n" .
            "به همین مناسبت، ۱۰ Banana هدیه اضافه هم می‌گیری.\n\n" .
            "پروفایلت رو کامل کن تا ۵۰ Banana دیگه هم بگیری!"
        );
    } else {
        sendMessage(
            $chat_id,
            "سلام به ربات مانکی خوش آمدید 🐒❤️"
        );
    }

    sendMessage(
        $chat_id,
        "لطفا جنسیت خود را انتخاب کنید:",
        genderKeyboard()
    );

    exit('OK');
}


/* =========================================================
   BANANA
========================================================= */

if ($text === '🍌 Banana') {

    if (!$profile) {
        sendMessage(
            $chat_id,
            "❌ اول باید پروفایل بسازی!"
        );
        exit('OK');
    }

    $stmt = $pdo->prepare("
        SELECT banana_balance
        FROM users
        WHERE telegram_id = ?
        LIMIT 1
    ");
    $stmt->execute([$telegram_id]);
    $banana_user = $stmt->fetch();

    $balance = $banana_user['banana_balance'] ?? 0;

    // پیدا کردن پکیج ریالی
    $stmt = $pdo->prepare("
        SELECT *
        FROM banana_packages
        WHERE is_active = 1
          AND price_toman IS NOT NULL
          AND price_toman > 0
        ORDER BY sort_order ASC
        LIMIT 1
    ");
    $stmt->execute();
    $rial_package = $stmt->fetch();

    // ساخت کیبورد واحد
    $buttons = [];

    // پکیج‌های Stars
    $stmt = $pdo->prepare("
        SELECT *
        FROM banana_packages
        WHERE is_active = 1
          AND star_price IS NOT NULL
          AND star_price > 0
        ORDER BY sort_order ASC
    ");
    $stmt->execute();
    $star_packages = $stmt->fetchAll();

    foreach ($star_packages as $pkg) {
        $buttons[] = [
            [
                'text' => '🍌 ' . $pkg['banana_amount'] . ' Banana  |  ⭐ ' . $pkg['star_price'],
                'callback_data' => 'banana_buy_' . $pkg['id']
            ]
        ];
    }

    // دکمه رفرال
    $buttons[] = [
        [
            'text' => '🎁 دریافت رایگان Banana',
            'callback_data' => 'referral_show'
        ]
    ];

    // دکمه ریالی
    if ($rial_package) {
        $price_formatted = number_format($rial_package['price_toman']);
        $banana_amount = $rial_package['banana_amount'];
        $buttons[] = [
            [
                'text' => "💳 خرید با کارت ریالی ({$banana_amount} Banana - {$price_formatted} تومان)",
                'callback_data' => 'rial_buy_' . $rial_package['id']
            ]
        ];
    }

    $text = "🍌 موجودی Banana تو\n\n" .
            "💰 موجودی فعلی: " . $balance . " Banana";

    sendMessage(
        $chat_id,
        $text,
        ['inline_keyboard' => $buttons]
    );

    exit('OK');
}


/* =========================================================
   PREMIUM SUBSCRIPTION
========================================================= */

if ($text === '💎 اشتراک پرمیوم') {

    if (!$profile) {
        sendMessage(
            $chat_id,
            "❌ اول باید پروفایل بسازی!"
        );
        exit('OK');
    }

    $stmt = $pdo->prepare("
        SELECT banana_balance, premium_expiry
        FROM users
        WHERE telegram_id = ?
        LIMIT 1
    ");
    $stmt->execute([$telegram_id]);
    $user_premium = $stmt->fetch();

    $balance = $user_premium['banana_balance'] ?? 0;
    $premium_expiry = $user_premium['premium_expiry'] ?? null;

    $premium_active = false;
    $premium_remaining = '';

    if (!empty($premium_expiry)) {
        $expiry_time = strtotime($premium_expiry);
        $now = time();

        if ($expiry_time > $now) {
            $premium_active = true;

            $diff = $expiry_time - $now;
            $days = floor($diff / 86400);
            $hours = floor(($diff % 86400) / 3600);

            if ($days > 0) {
                $premium_remaining = $days . ' روز و ' . $hours . ' ساعت';
            } else {
                $premium_remaining = $hours . ' ساعت';
            }
        }
    }

    if ($premium_active) {

        $text_premium = "💎 اشتراک پرمیوم\n\n" .
                        "✅ اشتراک پرمیوم شما فعاله!\n" .
                        "⏳ زمان باقی‌مانده: " . $premium_remaining . "\n\n" .
                        "💰 موجودی: " . $balance . " Banana\n" .
                        "💵 هزینه تمدید: ۶۰ Banana (۷ روز)\n\n" .
                        "می‌خوای تمدید کنی؟";

        sendMessage(
            $chat_id,
            $text_premium,
            [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '💎 تمدید پرمیوم (۶۰ Banana)',
                            'callback_data' => 'premium_confirm'
                        ]
                    ]
                ]
            ]
        );

        exit('OK');
    }

    if ($balance < 60) {

        sendMessage(
            $chat_id,
            "💎 اشتراک پرمیوم\n\n" .
            "❌ موجودی Banana کافی نیست!\n\n" .
            "💰 موجودی فعلی: " . $balance . " Banana\n" .
            "💵 هزینه: ۶۰ Banana\n\n" .
            "برای خرید Banana، دکمه 🍌 Banana رو بزن.",
            mainMenu()
        );

        exit('OK');
    }

    $text_premium = "💎 اشتراک پرمیوم\n\n" .
                    "با خرید پرمیوم، می‌تونی به هر کسی پیام دایرکت بدی.\n\n" .
                    "✅ فرستادن پیام نامحدود\n" .
                    "✅ ۷ روز اعتبار\n" .
                    "✅ بقیه می‌تونن بهت جواب بدن (بدون پرمیوم)\n\n" .
                    "💰 موجودی فعلی: " . $balance . " Banana\n" .
                    "💵 هزینه: ۶۰ Banana\n\n" .
                    "می‌خوای فعالش کنی؟";

    sendMessage(
        $chat_id,
        $text_premium,
        [
            'inline_keyboard' => [
                [
                    [
                        'text' => '💎 فعال‌سازی پرمیوم (۶۰ Banana)',
                        'callback_data' => 'premium_confirm'
                    ]
                ]
            ]
        ]
    );

    exit('OK');
}


/* =========================================================
   MY CHATS
========================================================= */

if ($text === '💬 چت‌های من') {

    if (!$profile) {
        sendMessage(
            $chat_id,
            "❌ اول باید پروفایل بسازی!"
        );
        exit('OK');
    }

    $stmt = $pdo->prepare("
        SELECT 
            c.*,
            CASE 
                WHEN c.user1_id = ? THEN c.user2_id 
                ELSE c.user1_id 
            END AS partner_id
        FROM direct_chats c
        WHERE c.user1_id = ? OR c.user2_id = ?
        ORDER BY c.last_message_at DESC
        LIMIT 30
    ");
    $stmt->execute([$telegram_id, $telegram_id, $telegram_id]);
    $chats = $stmt->fetchAll();

    if (!$chats) {
        sendMessage(
            $chat_id,
            "💬 هنوز هیچ مکالمه‌ای نداری.\n\n" .
            "برای شروع، برو توی اکسپلور و به یکی پیام بده.",
            mainMenu()
        );
        exit('OK');
    }

    sendMessage(
        $chat_id,
        "💬 چت‌های من (" . count($chats) . ")",
        [
            'inline_keyboard' => array_map(function($c) use ($pdo) {
                $stmt = $pdo->prepare("SELECT name FROM users WHERE telegram_id = ? LIMIT 1");
                $stmt->execute([$c['partner_id']]);
                $partner = $stmt->fetch();

                $name = $partner['name'] ?? 'کاربر';

                return [
                    [
                        'text' => '💬 ' . $name,
                        'callback_data' => 'open_chat_' . $c['partner_id']
                    ]
                ];
            }, $chats)
        ]
    );

    exit('OK');
}


/* =========================================================
   BOOST PROFILE
========================================================= */

if ($text === '🚀 Boost پروفایل') {

    if (!$profile) {
        sendMessage(
            $chat_id,
            "❌ اول باید پروفایل بسازی!"
        );
        exit('OK');
    }

    $stmt = $pdo->prepare("
        SELECT banana_balance, boost_expiry
        FROM users
        WHERE telegram_id = ?
        LIMIT 1
    ");
    $stmt->execute([$telegram_id]);
    $user_boost = $stmt->fetch();

    $balance = $user_boost['banana_balance'] ?? 0;
    $current_expiry = $user_boost['boost_expiry'] ?? null;

    $boost_active = false;
    $boost_remaining = '';

    if (!empty($current_expiry)) {
        $expiry_time = strtotime($current_expiry);
        $now = time();

        if ($expiry_time > $now) {
            $boost_active = true;

            $diff = $expiry_time - $now;
            $days = floor($diff / 86400);
            $hours = floor(($diff % 86400) / 3600);

            if ($days > 0) {
                $boost_remaining = $days . ' روز و ' . $hours . ' ساعت';
            } else {
                $boost_remaining = $hours . ' ساعت';
            }
        }
    }

    if ($boost_active) {

        $text_boost = "🚀 Boost پروفایل\n\n" .
                      "✅ پروفایلت الان Boost داره!\n" .
                      "⏳ زمان باقی‌مانده: " . $boost_remaining . "\n\n" .
                      "💰 موجودی: " . $balance . " Banana\n" .
                      "💵 هزینه تمدید: ۵۰ Banana (۷ روز)\n\n" .
                      "می‌خوای Boost رو تمدید کنی؟";

        sendMessage(
            $chat_id,
            $text_boost,
            [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '🚀 تمدید Boost (۵۰ Banana)',
                            'callback_data' => 'boost_confirm'
                        ]
                    ]
                ]
            ]
        );

        exit('OK');
    }

    if ($balance < 50) {

        sendMessage(
            $chat_id,
            "🚀 Boost پروفایل\n\n" .
            "❌ موجودی Banana کافی نیست!\n\n" .
            "💰 موجودی فعلی: " . $balance . " Banana\n" .
            "💵 هزینه Boost: ۵۰ Banana\n\n" .
            "برای خرید Banana، دکمه 🍌 Banana رو بزن.",
            mainMenu()
        );

        exit('OK');
    }

    $text_boost = "🚀 Boost پروفایل\n\n" .
                  "با Boost، پروفایلت به مدت ۷ روز بالای همه نشون داده میشه.\n\n" .
                  "💰 موجودی فعلی: " . $balance . " Banana\n" .
                  "💵 هزینه: ۵۰ Banana\n" .
                  "📅 مدت: ۷ روز\n\n" .
                  "می‌خوای فعالش کنی؟";

    sendMessage(
        $chat_id,
        $text_boost,
        [
            'inline_keyboard' => [
                [
                    [
                        'text' => '🚀 فعال‌سازی Boost (۵۰ Banana)',
                        'callback_data' => 'boost_confirm'
                    ]
                ]
            ]
        ]
    );

    exit('OK');
}


/* =========================================================
   LIKES - کسایی که لایکم کردن
========================================================= */

if ($text === '❤️ کسایی که لایکم کردن') {

    if (!$profile) {
        sendMessage($chat_id, "❌ اول باید پروفایل بسازی!");
        exit('OK');
    }

    $stmt = $pdo->prepare("
        SELECT 
            u.telegram_id,
            u.name,
            u.age,
            u.city,
            u.province,
            u.bio,
            u.photo,
            u.gender,
            l.created_at AS liked_at,
            CASE WHEN my_like.id IS NOT NULL THEN 1 ELSE 0 END AS is_liked,
            CASE 
                WHEN my_like.id IS NOT NULL AND their_like.id IS NOT NULL 
                THEN 1 
                ELSE 0 
            END AS is_match
        FROM likes l
        INNER JOIN users u ON u.telegram_id = l.liker_id
        LEFT JOIN likes my_like 
            ON my_like.liker_id = ? 
            AND my_like.liked_id = u.telegram_id
        LEFT JOIN likes their_like 
            ON their_like.liker_id = u.telegram_id 
            AND their_like.liked_id = ?
        WHERE 
            l.liked_id = ?
            AND u.is_blocked = 0
            AND u.name IS NOT NULL 
            AND u.name != ''
        ORDER BY l.created_at DESC, l.id DESC
        LIMIT 50
    ");
    $stmt->execute([$telegram_id, $telegram_id, $telegram_id]);
    $likers = $stmt->fetchAll();

    if (!$likers) {
        sendMessage(
            $chat_id,
            "💔 هنوز کسی تو رو لایک نکرده.\n\n" .
            "پروفایلت رو کامل کن و توی اکسپلور فعال باش تا دیده بشی.",
            mainMenu()
        );
        exit('OK');
    }

    sendMessage(
        $chat_id,
        "❤️ " . count($likers) . " نفر تو رو لایک کردن:"
    );

    foreach ($likers as $liker) {

        $location = '';
        if (!empty($liker['province'])) {
            $location = $liker['province'];
            if (!empty($liker['city'])) {
                $location .= '، ' . $liker['city'];
            }
        } elseif (!empty($liker['city'])) {
            $location = $liker['city'];
        } else {
            $location = 'نامشخص';
        }

        $caption =
            "👤 " . ($liker['name'] ?? 'بی‌نام') . "\n" .
            "🎂 " . ($liker['age'] ?? '؟') . " سال\n" .
            "📍 " . $location . "\n\n" .
            "📝 " . ($liker['bio'] ?? 'توضیحی وارد نشده');

        if ($liker['is_match'] == 1) {
            $caption .= "\n\n🎉 شما با این شخص مچ شده‌اید!";
        }

        if ($liker['is_liked'] == 1) {
            $keyboard = [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '🎉 مچ شده - شروع چت',
                            'callback_data' => 'match_start_' . $liker['telegram_id']
                        ]
                    ]
                ]
            ];
        } else {
            $keyboard = [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '❤️ لایک متقابل',
                            'callback_data' => 'like_' . $liker['telegram_id'] . '_0'
                        ]
                    ]
                ]
            ];
        }

        if (
            !empty($liker['photo']) &&
            file_exists(__DIR__ . '/' . $liker['photo'])
        ) {
            sendPhoto($chat_id, $liker['photo'], $caption, $keyboard);
        } else {
            sendMessage($chat_id, $caption, $keyboard);
        }
    }

    exit('OK');
}


/* =========================================================
   QUICK CHAT MENU
========================================================= */

if ($text === '💬 چت سریع') {

    if (!$profile) {

        sendMessage(
            $chat_id,
            "❌ اول باید پروفایل بسازی!"
        );

        exit('OK');
    }


    sendMessage(
        $chat_id,
        "💬 چت سریع\n\n" .
        "با چه کسی می‌خواهی چت کنی؟",
        quickChatGenderKeyboard()
    );

    exit('OK');
}


/* =========================================================
   QUICK CHAT CANCEL
========================================================= */

if ($text === '❌ لغو') {

    $stmt = $pdo->prepare("
        DELETE FROM quick_chat_queue
        WHERE telegram_id = ?
    ");

    $stmt->execute([
        $telegram_id
    ]);


    sendMessage(
        $chat_id,
        "❌ جست‌وجوی چت لغو شد.",
        mainMenu()
    );

    exit('OK');
}


/* =========================================================
   QUICK CHAT GENDER
   (فقط اگر پروفایل کاربر کاملاً تکمیل شده باشد)
========================================================= */

if (
    $profile &&
    ($profile['edit_mode'] ?? null) === null &&
    !empty($profile['name']) &&
    !empty($profile['gender']) &&
    (
        $text === '👩 زن' ||
        $text === '👨 مرد' ||
        $text === '🌎 فرقی ندارد'
    )
) {

    if (empty($profile['gender'])) {
        sendMessage(
            $chat_id,
            "❌ جنسیت پروفایل مشخص نیست.\n\nلطفاً ابتدا پروفایلت را کامل کن.",
            mainMenu()
        );
        exit('OK');
    }

    $target_gender = 'همه';
    if ($text === '👩 زن') $target_gender = 'زن';
    if ($text === '👨 مرد') $target_gender = 'مرد';

    $room_created = false;
    $waiting_user = null;

    try {
        /*
         * Lock our user row first. This prevents two Telegram updates from
         * the same user from creating two rooms at the same time.
         */
        $pdo->beginTransaction();

        $stmt = $pdo->prepare("
            SELECT telegram_id, gender, is_blocked
            FROM users
            WHERE telegram_id = ?
            LIMIT 1
            FOR UPDATE
        ");
        $stmt->execute([$telegram_id]);
        $locked_me = $stmt->fetch();

        if (!$locked_me || (int)$locked_me['is_blocked'] === 1) {
            $pdo->rollBack();
            denyBlockedUser($chat_id);
        }

        /* Never allow a user who is already chatting to enter the queue. */
        $current_room = getCurrentRoom($pdo, $telegram_id);

        if ($current_room) {
            $pdo->rollBack();
            sendMessage(
                $chat_id,
                "💬 تو همین الان داخل یک چت هستی.\n\nبرای شروع چت جدید، اول روی «❌ پایان چت» بزن.",
                chatKeyboard()
            );
            exit('OK');
        }

        /* Remove any stale queue entry belonging to this user. */
        $stmt = $pdo->prepare("DELETE FROM quick_chat_queue WHERE telegram_id = ?");
        $stmt->execute([$telegram_id]);

        /*
         * Find the oldest compatible waiting user.
         * q.target_gender = what the waiting user wants to talk to.
         * u.gender       = the waiting user's own gender.
         */
        $stmt = $pdo->prepare("
            SELECT
                q.telegram_id,
                q.gender,
                q.target_gender,
                q.created_at
            FROM quick_chat_queue q
            INNER JOIN users u
                ON u.telegram_id = q.telegram_id
                AND u.is_blocked = 0
            WHERE q.telegram_id != ?
              AND (
                    q.target_gender = ?
                    OR q.target_gender = 'همه'
                  )
              AND (
                    ? = 'همه'
                    OR u.gender = ?
                  )
            ORDER BY q.created_at ASC
            LIMIT 1
        ");
        $stmt->execute([
            $telegram_id,
            $profile['gender'],
            $target_gender,
            $target_gender
        ]);
        $waiting_user = $stmt->fetch();

        if (!$waiting_user) {
            $stmt = $pdo->prepare("
                INSERT INTO quick_chat_queue
                (
                    telegram_id,
                    gender,
                    target_gender
                )
                VALUES (?, ?, ?)
            ");
            $stmt->execute([
                $telegram_id,
                $profile['gender'],
                $target_gender
            ]);

            $pdo->commit();

            sendMessage(
                $chat_id,
                "🔎 دارم دنبال یک نفر مناسب می‌گردم...\n\n" .
                "⏳ وقتی کسی پیدا بشه، چت شروع میشه."
            );
            exit('OK');
        }

        $waiting_id = (int)$waiting_user['telegram_id'];

        /* Lock the matched user's account before creating the room. */
        $stmt = $pdo->prepare("
            SELECT telegram_id, gender, is_blocked
            FROM users
            WHERE telegram_id = ?
            LIMIT 1
            FOR UPDATE
        ");
        $stmt->execute([$waiting_id]);
        $locked_waiting_user = $stmt->fetch();

        if (!$locked_waiting_user || (int)$locked_waiting_user['is_blocked'] === 1) {
            $stmt = $pdo->prepare("DELETE FROM quick_chat_queue WHERE telegram_id = ?");
            $stmt->execute([$waiting_id]);
            $pdo->commit();

            sendMessage(
                $chat_id,
                "🔎 نفر قبلی از جست‌وجو خارج شد. دوباره تلاش می‌کنم..."
            );
            exit('OK');
        }

        /* Re-check the candidate after acquiring the lock. */
        $stmt = $pdo->prepare("SELECT id FROM quick_chat_queue WHERE telegram_id = ? LIMIT 1");
        $stmt->execute([$waiting_id]);
        $still_waiting = $stmt->fetch();

        if (!$still_waiting) {
            $pdo->commit();
            sendMessage(
                $chat_id,
                "🔎 نفر قبلی از جست‌وجو خارج شد. دوباره تلاش کن."
            );
            exit('OK');
        }

        $waiting_room = getCurrentRoom($pdo, $waiting_id);

        if ($waiting_room) {
            $stmt = $pdo->prepare("DELETE FROM quick_chat_queue WHERE telegram_id = ?");
            $stmt->execute([$waiting_id]);
            $pdo->commit();

            sendMessage(
                $chat_id,
                "🔎 نفر قبلی وارد یک چت شده است. دوباره تلاش کن."
            );
            exit('OK');
        }

        /* Final reciprocal gender check after locking the candidate. */
        $candidate_matches = (
            $waiting_user['target_gender'] === 'همه' ||
            $waiting_user['target_gender'] === $profile['gender']
        );

        $my_choice_matches = (
            $target_gender === 'همه' ||
            $locked_waiting_user['gender'] === $target_gender
        );

        if (!$candidate_matches || !$my_choice_matches) {
            $pdo->commit();
            sendMessage(
                $chat_id,
                "🔎 نفر سازگار پیدا نشد. دوباره تلاش کن."
            );
            exit('OK');
        }

        /* Create exactly one room, then remove both queue entries atomically. */
        $stmt = $pdo->prepare("
            INSERT INTO quick_chat_rooms
            (
                user1_id,
                user2_id
            )
            VALUES (?, ?)
        ");
        $stmt->execute([
            $waiting_id,
            $telegram_id
        ]);

        $stmt = $pdo->prepare("
            DELETE FROM quick_chat_queue
            WHERE telegram_id IN (?, ?)
        ");
        $stmt->execute([
            $waiting_id,
            $telegram_id
        ]);

        $pdo->commit();
        $room_created = true;

    } catch (PDOException $e) {

        if ($pdo->inTransaction()) {
            $pdo->rollBack();
        }

        error_log('Quick Chat DB error for user ' . $telegram_id . ': ' . $e->getMessage());

        sendMessage(
            $chat_id,
            "⚠️ فعلاً نتونستم چت رو شروع کنم.\n\nلطفاً چند ثانیه بعد دوباره «💬 چت سریع» رو امتحان کن.",
            mainMenu()
        );
        exit('OK');

    } catch (Exception $e) {

        if ($pdo->inTransaction()) {
            $pdo->rollBack();
        }

        error_log('Quick Chat error for user ' . $telegram_id . ': ' . $e->getMessage());

        sendMessage(
            $chat_id,
            "⚠️ فعلاً نتونستم چت رو شروع کنم.\n\nلطفاً چند ثانیه بعد دوباره «💬 چت سریع» رو امتحان کن.",
            mainMenu()
        );
        exit('OK');
    }

    if ($room_created && $waiting_user) {
        sendMessage(
            $chat_id,
            "🎉 یک نفر پیدا شد!\n\n" .
            "💬 چت شما شروع شد.\n" .
            "پیامت را بفرست.",
            chatKeyboard()
        );

        sendMessage(
            $waiting_user['telegram_id'],
            "🎉 یک نفر پیدا شد!\n\n" .
            "💬 چت شما شروع شد.\n" .
            "پیامت را بفرست.",
            chatKeyboard()
        );
    }

    exit('OK');
}


/* =========================================================
   PROFILE
========================================================= */

if ($text === '👤 پروفایل من') {

    if (!$profile) {

        sendMessage(
            $chat_id,
            "❌ تو هنوز پروفایل نداری."
        );

        exit('OK');
    }


    $location = '';
    if (!empty($profile['province'])) {
        $location = $profile['province'];
        if (!empty($profile['city'])) {
            $location .= '، ' . $profile['city'];
        }
    } elseif (!empty($profile['city'])) {
        $location = $profile['city'];
    } else {
        $location = 'نامشخص';
    }

    $caption =
        "👤 پروفایل من\n\n" .
        "اسم: " . ($profile['name'] ?? '-') . "\n" .
        "🎂 سن: " . ($profile['age'] ?? '-') . "\n" .
        "📍 " . $location . "\n" .
        "⚧ جنسیت: " . ($profile['gender'] ?? '-') . "\n\n" .
        "📝 درباره من:\n" .
        ($profile['bio'] ?? '-');


    if (
        !empty($profile['photo']) &&
        file_exists(__DIR__ . '/' . $profile['photo'])
    ) {

        sendPhoto(
            $chat_id,
            $profile['photo'],
            $caption,
            profileKeyboard()
        );

    } else {

        sendMessage(
            $chat_id,
            $caption,
            profileKeyboard()
        );
    }

    exit('OK');
}


/* =========================================================
   EXPLORE
========================================================= */

if ($text === '🔎 اکسپلور') {

    if (!$profile) {

        sendMessage(
            $chat_id,
            "❌ اول باید پروفایل بسازی!"
        );

        exit('OK');
    }


    sendMessage(
        $chat_id,
        "🔎 اکسپلور\n\n" .
        "فیلتر جنسیت رو انتخاب کن:",
        exploreKeyboard()
    );

    exit('OK');
}


/* =========================================================
   EXPLORE FILTERS
========================================================= */

if (
    $text === '👩 فقط خانم‌ها' ||
    $text === '👨 فقط آقایان' ||
    $text === '🌎 همه'
) {

    if (!$profile) {
        sendMessage(
            $chat_id,
            "❌ اول باید پروفایل بسازی!"
        );
        exit('OK');
    }

    $gender_code = '0';
    if ($text === '👩 فقط خانم‌ها') {
        $gender_code = '1';
    } elseif ($text === '👨 فقط آقایان') {
        $gender_code = '2';
    }

    $gender_label =
        ($gender_code === '1') ? 'فقط خانم‌ها' :
        (($gender_code === '2') ? 'فقط آقایان' : 'همه');

    sendMessage(
        $chat_id,
        "📍 حالا استان موردنظرت رو انتخاب کن:

" .
        "👤 فیلتر جنسیت: " . $gender_label,
        exploreProvinceKeyboard($gender_code, 1)
    );

    exit('OK');
}


/* =========================================================
   BACK
========================================================= */

if ($text === '⬅️ بازگشت') {

    sendMessage(
        $chat_id,
        "🔙 منوی اصلی",
        mainMenu()
    );

    exit('OK');
}


/* =========================================================
   REGISTRATION GENDER
========================================================= */

if (
    $text === '👩 زن' ||
    $text === '👨 مرد'
) {

    $gender =
        ($text === '👩 زن')
        ? 'زن'
        : 'مرد';


    $stmt = $pdo->prepare("
        UPDATE users
        SET
            gender = ?,
            edit_mode = 'name_signup'
        WHERE telegram_id = ?
    ");

    $stmt->execute([
        $gender,
        $telegram_id
    ]);


    sendMessage(
        $chat_id,
        "👤 اسمت رو وارد کن:",
        ['remove_keyboard' => true]
    );

    exit('OK');
}


/* =========================================================
   DIRECT CHAT MESSAGE
========================================================= */

$edit_mode_check = $profile['edit_mode'] ?? null;

if ($edit_mode_check && strpos($edit_mode_check, 'chat_with_') === 0) {

    $partner_id = (int)substr($edit_mode_check, 10);

    if ($partner_id > 0 && $partner_id != $telegram_id) {

        $user1 = min($telegram_id, $partner_id);
        $user2 = max($telegram_id, $partner_id);

        $stmt = $pdo->prepare("
            SELECT id
            FROM direct_chats
            WHERE user1_id = ? AND user2_id = ?
            LIMIT 1
        ");
        $stmt->execute([$user1, $user2]);
        $chat = $stmt->fetch();

        if (!$chat) {
            $stmt = $pdo->prepare("
                INSERT INTO direct_chats
                (user1_id, user2_id, last_message, last_message_at)
                VALUES (?, ?, ?, NOW())
            ");
            $stmt->execute([$user1, $user2, $text]);
            $chat_id_db = $pdo->lastInsertId();
        } else {
            $chat_id_db = $chat['id'];

            $stmt = $pdo->prepare("
                UPDATE direct_chats
                SET last_message = ?, last_message_at = NOW()
                WHERE id = ?
            ");
            $stmt->execute([$text, $chat_id_db]);
        }

        $stmt = $pdo->prepare("
            INSERT INTO direct_messages
            (chat_id, from_user, to_user, message)
            VALUES (?, ?, ?, ?)
        ");
        $stmt->execute([$chat_id_db, $telegram_id, $partner_id, $text]);

        sendMessage(
            $partner_id,
            "💬 پیام جدید از یه کاربر!\n\n" .
            "برای دیدن، توی ربات دکمه 💬 چت‌های من رو بزن.",
            mainMenu()
        );

        sendMessage(
            $chat_id,
            "✅ پیامت ارسال شد.\n\n" .
            "می‌تونی پیام بعدی رو هم بفرستی یا با ❌ بستن چت تمومش کنی.",
            [
                'inline_keyboard' => [
                    [
                        [
                            'text' => '❌ بستن چت',
                            'callback_data' => 'close_chat'
                        ]
                    ]
                ]
            ]
        );

        exit('OK');
    }
}


/* =========================================================
   EDIT / SIGNUP MODE
========================================================= */

$edit_mode = $profile['edit_mode'] ?? null;


/* =========================
   SIGNUP NAME
========================= */

if ($edit_mode === 'name_signup') {

    $stmt = $pdo->prepare("
        UPDATE users
        SET
            name = ?,
            edit_mode = 'age_signup'
        WHERE telegram_id = ?
    ");

    $stmt->execute([
        $text,
        $telegram_id
    ]);


    sendMessage(
        $chat_id,
        "🎂 سنت رو وارد کن:",
        ['remove_keyboard' => true]
    );

    exit('OK');
}


/* =========================
   SIGNUP AGE (بعد از سن، استان)
========================= */

if ($edit_mode === 'age_signup') {

    if (!is_numeric($text)) {

        sendMessage(
            $chat_id,
            "❌ لطفاً سن را به صورت عدد وارد کن:"
        );

        exit('OK');
    }


    $stmt = $pdo->prepare("
        UPDATE users
        SET
            age = ?,
            edit_mode = 'province_signup'
        WHERE telegram_id = ?
    ");

    $stmt->execute([
        intval($text),
        $telegram_id
    ]);


    sendMessage(
        $chat_id,
        "📍 استان خودت رو انتخاب کن:",
        provinceKeyboard(1)
    );

    exit('OK');
}


/* =========================
   SIGNUP PROVINCE
========================= */

if ($edit_mode === 'province_signup') {

    // کاربر باید استان انتخاب کنه، نه تایپ
    sendMessage(
        $chat_id,
        "📍 لطفاً استان خودت رو از دکمه‌های زیر انتخاب کن:",
        provinceKeyboard(1)
    );

    exit('OK');
}


/* =========================
   SIGNUP CITY
========================= */

if ($edit_mode === 'city_signup') {

    $stmt = $pdo->prepare("
        UPDATE users
        SET
            city = ?,
            edit_mode = 'photo_signup'
        WHERE telegram_id = ?
    ");

    $stmt->execute([
        $text,
        $telegram_id
    ]);


    sendMessage(
        $chat_id,
        "📸 حالا یک عکس از خودت بفرست:",
        ['remove_keyboard' => true]
    );

    exit('OK');
}


/* =========================
   SIGNUP BIO
========================= */

if ($edit_mode === 'bio_signup') {

    $stmt = $pdo->prepare("
        SELECT referred_by
        FROM users
        WHERE telegram_id = ?
        LIMIT 1
    ");
    $stmt->execute([$telegram_id]);
    $user_info = $stmt->fetch();

    $has_referral = !empty($user_info['referred_by']);
    $referrer_id = $user_info['referred_by'] ?? null;

    $total_bonus = 50;
    $referral_bonus = 0;

    if ($has_referral && $referrer_id) {
        $referral_bonus = 10;
        $total_bonus += $referral_bonus;
    }

    $stmt = $pdo->prepare("
        UPDATE users
        SET
            bio = ?,
            edit_mode = NULL,
            banana_balance = banana_balance + ?
        WHERE telegram_id = ?
    ");

    $stmt->execute([
        $text,
        $total_bonus,
        $telegram_id
    ]);

    $stmt = $pdo->prepare("
        INSERT INTO banana_transactions
        (user_id, amount, type, description)
        VALUES (?, ?, 'signup_bonus', 'هدیه تکمیل پروفایل')
    ");

    $stmt->execute([
        $telegram_id,
        50
    ]);

    if ($referral_bonus > 0) {
        $stmt = $pdo->prepare("
            INSERT INTO banana_transactions
            (user_id, amount, type, description)
            VALUES (?, ?, 'referral_bonus', 'هدیه ورود با لینک دعوت')
        ");

        $stmt->execute([
            $telegram_id,
            $referral_bonus
        ]);
    }

    if ($has_referral && $referrer_id) {

        $stmt = $pdo->prepare("
            UPDATE users
            SET banana_balance = banana_balance + 10
            WHERE telegram_id = ?
        ");
        $stmt->execute([$referrer_id]);

        $stmt = $pdo->prepare("
            INSERT INTO banana_transactions
            (user_id, amount, type, description)
            VALUES (?, ?, 'referral_earned', ?)
        ");
        $stmt->execute([
            $referrer_id,
            10,
            'دعوت کاربر جدید'
        ]);

        sendMessage(
            $referrer_id,
            "🎉 یک نفر با لینک دعوت تو اومد!\n\n" .
            "🍌 ۱۰ Banana به حسابت اضافه شد.\n\n" .
            "برای دعوت بیشتر، دکمه 🍌 Banana رو بزن."
        );
    }

    $success_text = "✅ پروفایل با موفقیت ساخته شد! 🎉\n\n";

    if ($has_referral) {
        $success_text .= "🍌 ۵۰ Banana هدیه تکمیل پروفایل\n";
        $success_text .= "🎁 ۱۰ Banana هدیه دعوت دوست\n";
        $success_text .= "💰 مجموع: " . $total_bonus . " Banana\n\n";
        $success_text .= "موجودی فعلی: " . $total_bonus . " Banana";
    } else {
        $success_text .= "🍌 ۵۰ Banana هدیه گرفتی!\n\n";
        $success_text .= "موجودی فعلی: 50 Banana";
    }

    sendMessage(
        $chat_id,
        $success_text,
        mainMenu()
    );

    exit('OK');
}


/* =========================
   EDIT NAME
========================= */

if ($edit_mode === 'name_edit') {

    $stmt = $pdo->prepare("
        UPDATE users
        SET
            name = ?,
            edit_mode = NULL
        WHERE telegram_id = ?
    ");

    $stmt->execute([
        $text,
        $telegram_id
    ]);


    sendMessage(
        $chat_id,
        "✅ اسم با موفقیت تغییر کرد.",
        mainMenu()
    );

    exit('OK');
}


/* =========================
   EDIT CITY
========================= */

if ($edit_mode === 'city_edit') {

    $stmt = $pdo->prepare("
        UPDATE users
        SET
            city = ?,
            edit_mode = NULL
        WHERE telegram_id = ?
    ");

    $stmt->execute([
        $text,
        $telegram_id
    ]);


    sendMessage(
        $chat_id,
        "✅ شهر با موفقیت تغییر کرد.",
        mainMenu()
    );

    exit('OK');
}


/* =========================
   EDIT PROVINCE (منتظر انتخاب از دکمه)
========================= */

if ($edit_mode === 'province_edit') {

    sendMessage(
        $chat_id,
        "📍 استان جدیدت رو انتخاب کن:",
        provinceKeyboard(1)
    );

    exit('OK');
}


/* =========================
   EDIT BIO
========================= */

if ($edit_mode === 'bio_edit') {

    $stmt = $pdo->prepare("
        UPDATE users
        SET
            bio = ?,
            edit_mode = NULL
        WHERE telegram_id = ?
    ");

    $stmt->execute([
        $text,
        $telegram_id
    ]);


    sendMessage(
        $chat_id,
        "✅ توضیحات با موفقیت تغییر کرد.",
        mainMenu()
    );

    exit('OK');
}


/* =========================================================
   PHOTO
========================================================= */

if (isset($message['photo'])) {

    $fresh_room = getCurrentRoom($pdo, $telegram_id);
    $edit_mode = $profile['edit_mode'] ?? null;

    if (
        $fresh_room &&
        $edit_mode !== 'photo_signup' &&
        $edit_mode !== 'photo_edit'
    ) {
        $partner_id = ($fresh_room['user1_id'] == $telegram_id) ? $fresh_room['user2_id'] : $fresh_room['user1_id'];
        $result = copyMessage($partner_id, $chat_id, $message['message_id']);
        if (empty($result['ok'])) {
            sendMessage($chat_id, "❌ ارسال عکس انجام نشد.", chatKeyboard());
        }
        exit('OK');
    }

    if (
        !$profile ||
        (
            $edit_mode !== 'photo_signup' &&
            $edit_mode !== 'photo_edit'
        )
    ) {
        sendMessage($chat_id, "📸 برای تغییر عکس، از بخش ویرایش پروفایل استفاده کن.");
        exit('OK');
    }


    $photo = $message['photo'];

    $file_id =
        $photo[count($photo) - 1]['file_id'];


    $file_name =
        'photos/' .
        $telegram_id . '_' .
        time() .
        '.jpg';


    $file = telegram('getFile', [
        'file_id' => $file_id
    ]);


    $file_path =
        $file['result']['file_path'] ?? null;


    if (!$file_path) {

        sendMessage(
            $chat_id,
            "❌ خطا در دریافت عکس"
        );

        exit('OK');
    }


    $file_url =
        "https://api.telegram.org/file/bot{$BOT_TOKEN}/{$file_path}";


    $ch = curl_init($file_url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    $file_data = curl_exec($ch);

    curl_close($ch);


    if ($file_data === false) {

        sendMessage(
            $chat_id,
            "❌ خطا در دانلود عکس"
        );

        exit('OK');
    }


    if (!is_dir(__DIR__ . '/photos')) {

        mkdir(
            __DIR__ . '/photos',
            0777,
            true
        );
    }


    file_put_contents(
        __DIR__ . '/' . $file_name,
        $file_data
    );


    if ($edit_mode === 'photo_signup') {
        $stmt = $pdo->prepare("UPDATE users SET photo = ?, edit_mode = 'bio_signup' WHERE telegram_id = ?");
        $stmt->execute([$file_name, $telegram_id]);
        sendMessage($chat_id, "📸 عکست ثبت شد!\n\n📝 حالا یه توضیح کوتاه درباره خودت بنویس:", ['remove_keyboard' => true]);
        exit('OK');
    }

    if ($edit_mode === 'photo_edit') {

        $stmt = $pdo->prepare("
            UPDATE users
            SET
                photo = ?,
                edit_mode = NULL
            WHERE telegram_id = ?
        ");

        $stmt->execute([
            $file_name,
            $telegram_id
        ]);


        sendMessage(
            $chat_id,
            "✅ عکس با موفقیت تغییر کرد.",
            mainMenu()
        );

        exit('OK');
    }

}


/* =========================================================
   ANONYMOUS CHAT MESSAGE
========================================================= */
$fresh_room = getCurrentRoom($pdo, $telegram_id);

if ($fresh_room && isset($message['message_id'])) {
    $partner_id = ($fresh_room['user1_id'] == $telegram_id) ? $fresh_room['user2_id'] : $fresh_room['user1_id'];
    $result = copyMessage($partner_id, $chat_id, $message['message_id']);
    if (empty($result['ok'])) {
        sendMessage($chat_id, "❌ ارسال پیام انجام نشد. دوباره تلاش کن.", chatKeyboard());
    }
    exit('OK');
}


/* =========================================================
   UNKNOWN
========================================================= */

sendMessage(
    $chat_id,
    "❌ من این دستور رو نمی‌شناسم.\n" .
    "از دکمه‌های پایین صفحه استفاده کن.",
    mainMenu()
);

exit('OK');
?>