<?php
error_reporting(0);
date_default_timezone_set("Asia/Tehran");

/*================ CONFIG ================*/
$token = "8620229914:AAHKB_MlCLaXm_Q4vgxre77xCBAP6-RxUqE";
$admin_id = 265735902;
define('API_KEY',$token);

function bot($method,$datas=[]){
    $url = "https://api.telegram.org/bot".API_KEY."/".$method;
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$datas);
    $res = curl_exec($ch);
    return json_decode($res,true);
}

// تابع بررسی ادمین بودن کاربر در گروه
function isAdmin($chat_id, $user_id, $admin_id) {
    if($user_id == $admin_id) return true;
    $res = bot("getChatMember", ["chat_id" => $chat_id, "user_id" => $user_id]);
    $status = $res["result"]["status"] ?? "";
    return in_array($status, ["creator", "administrator"]);
}

/*================ STORAGE ================*/
if(!file_exists("data.json")){
    file_put_contents("data.json",json_encode([
        "bot_status"=>"on",
        "groups"=>[],
        "pending_groups"=>[],
        "blocked"=>[],
        "blocked_groups"=>[],
        "waiting_block"=>false,
        "waiting_unblock"=>false,
        "waiting_block_group"=>false,
        "waiting_send_all"=>false,
        "rejected_groups"=>[],
        "group_sets"=>[] // ذخیره نوع ست هر گروه
    ]));
}
$data = json_decode(file_get_contents("data.json"),true);

if(!isset($data["users"])) $data["users"] = [];
if(!isset($data["group_sets"])) $data["group_sets"] = [];

/*================ UPDATE ================*/
$update = json_decode(file_get_contents("php://input"),true);
$message = $update["message"] ?? null;
$callback = $update["callback_query"] ?? null;

if(!$message && !$callback) exit;

$chat_id = $message["chat"]["id"] ?? ($callback["message"]["chat"]["id"] ?? null);
$from_id = $message["from"]["id"] ?? ($callback["from"]["id"] ?? null);
$text = $message["text"] ?? null;
$chat_type = $message["chat"]["type"] ?? null;

/*================ SAVE USER ID ================*/
if($from_id && !in_array($from_id, $data["users"])){
    $data["users"][] = $from_id;
    file_put_contents("data.json",json_encode($data));
}

/*================ BLOCK CHECK ================*/
if(in_array($from_id,$data["blocked"])) exit;
if(in_array($chat_id,$data["blocked_groups"] ?? [])) exit;

/*================ CALLBACK HANDLER =================*/
if($callback){
    $data_cb = $callback["data"];
    $msg_id_cb = $callback["message"]["message_id"];
    $chat_id_cb = $callback["message"]["chat"]["id"];

    // تنظیم نوع ست توسط ادمین گروه
    if(strpos($data_cb, "settype_") !== false){
        if(isAdmin($chat_id_cb, $from_id, $admin_id)){
            $selected_set = str_replace("settype_", "", $data_cb);
            $data["group_sets"][$chat_id_cb] = $selected_set;
            file_put_contents("data.json", json_encode($data));
            
            $names = ["777" => "کازینو 777 🎰", "lemon" => "لیمو 🍋", "grape" => "انگور 🍇", "bar" => "بار BAR 💎"];
            $set_name = $names[$selected_set] ?? "نامشخص";
            
            bot("answerCallbackQuery", ["callback_query_id" => $callback["id"], "text" => "✅ ست هدف گروه به $set_name تغییر یافت."]);
            bot("editMessageText", [
                "chat_id" => $chat_id_cb,
                "message_id" => $msg_id_cb,
                "text" => "🎯 ست هدف این گروه با موفقیت روی حالت **$set_name** تنظیم شد. از این به بعد فقط این ست پین و اعلام وین می‌شود."
            ]);
        } else {
            bot("answerCallbackQuery", ["callback_query_id" => $callback["id"], "text" => "❌ شما ادمین این گروه نیستید!", "show_alert" => true]);
        }
        exit;
    }

    // پنل مدیریت اصلی ربات (مخصوص ادمین کل)
    if($from_id == $admin_id){
        if($data_cb=="list_groups"){
            $list = implode("\n",$data["groups"]) ?: "هیچ گروه فعالی وجود ندارد";
            bot("answerCallbackQuery",["callback_query_id"=>$callback["id"],"text"=>"✅ لیست گروه‌ها ارسال شد"]);
            bot("sendMessage",["chat_id"=>$chat_id_cb,"text"=>"گروه‌های فعال:\n$list"]);
        }
        if($data_cb=="list_pending"){
            $list = implode("\n",$data["pending_groups"]) ?: "درخواستی وجود ندارد";
            bot("answerCallbackQuery",["callback_query_id"=>$callback["id"],"text"=>"✅ لیست درخواست‌ها ارسال شد"]);
            bot("sendMessage",["chat_id"=>$chat_id_cb,"text"=>"درخواست‌های در انتظار:\n$list"]);
        }
        if($data_cb=="block_user"){
            $data["waiting_block"]=true; $data["waiting_unblock"]=false; $data["waiting_block_group"]=false; $data["waiting_send_all"]=false;
            bot("answerCallbackQuery",["callback_query_id"=>$callback["id"],"text"=>"✅ لطفاً آیدی عددی کاربر را ارسال کنید","show_alert"=>true]);
        }
        if($data_cb=="unblock_user"){
            $data["waiting_unblock"]=true; $data["waiting_block"]=false; $data["waiting_block_group"]=false; $data["waiting_send_all"]=false;
            bot("answerCallbackQuery",["callback_query_id"=>$callback["id"],"text"=>"✅ لطفاً آیدی عددی کاربر را ارسال کنید","show_alert"=>true]);
        }
        if($data_cb=="bot_stats"){
            $count_groups = count($data["groups"]);
            $count_pending = count($data["pending_groups"]);
            $count_rejected = count($data["rejected_groups"] ?? []);
            $count_blocked = count($data["blocked"]);
            $count_blocked_groups = count($data["blocked_groups"] ?? []);
            $count_users = count($data["users"] ?? []);
            
            $stats_text = "📊 آمار ربات شما:\n\n👥 گروه‌های فعال: $count_groups\n⏳ گروه‌های در انتظار: $count_pending\n❌ گروه‌های رد شده: $count_rejected\n🚫 گروه‌های بلاک شده: $count_blocked_groups\n👤 کل کاربران: $count_users\n🚫 کاربران بلاک شده: $count_blocked";
            bot("answerCallbackQuery",["callback_query_id"=>$callback["id"],"text"=>"📊 آمار دریافت شد"]);
            bot("sendMessage",["chat_id"=>$chat_id_cb,"text"=>$stats_text]);
        }
        if($data_cb=="send_all"){
            $data["waiting_send_all"]=true; $data["waiting_block"]=false; $data["waiting_unblock"]=false; $data["waiting_block_group"]=false;
            bot("answerCallbackQuery",["callback_query_id"=>$callback["id"],"text"=>"✍️ متن پیام همگانی را ارسال کنید","show_alert"=>true]);
        }
        if($data_cb=="block_group"){
            $data["waiting_block_group"]=true; $data["waiting_block"]=false; $data["waiting_unblock"]=false; $data["waiting_send_all"]=false;
            bot("answerCallbackQuery",["callback_query_id"=>$callback["id"],"text"=>"🚫 لطفاً آیدی عددی گروه را با منفی (-) ارسال کنید","show_alert"=>true]);
        }
        if(strpos($data_cb,"approve_")!==false){
            $group_id = str_replace("approve_","",$data_cb);
            if(!in_array($group_id,$data["groups"])) $data["groups"][]=$group_id;
            $data["pending_groups"]=array_diff($data["pending_groups"],[$group_id]);
            bot("editMessageText",["chat_id"=>$chat_id_cb,"message_id"=>$msg_id_cb,"text"=>"✅ گروه $group_id تایید شد."]);
        }
        if(strpos($data_cb,"reject_")!==false){
            $group_id = str_replace("reject_","",$data_cb);
            $data["pending_groups"]=array_diff($data["pending_groups"],[$group_id]);
            if(!isset($data["rejected_groups"])) $data["rejected_groups"] = [];
            if(!in_array($group_id, $data["rejected_groups"])) $data["rejected_groups"][] = $group_id;
            bot("editMessageText",["chat_id"=>$chat_id_cb,"message_id"=>$msg_id_cb,"text"=>"❌ گروه $group_id رد شد."]);
        }
        file_put_contents("data.json",json_encode($data));
        exit;
    }
}

/*================ USER DISPLAY =================*/
$username = $message["from"]["username"] ?? null;
$first = $message["from"]["first_name"] ?? "";
$last = $message["from"]["last_name"] ?? "";
$name_display = trim("$first $last") ?: "کاربر";
$user_display = $username ? "@$username" : $name_display;

/*================ START COMMAND =================*/
if($message && $chat_type=="private" && $text=="/start"){
    $start_text = "سلام! 👋\nکافیه من رو تو گروهت اد کنی و ادمین کنی 🧑‍✈️ تا تمامی ست‌های کازینو 🎰 رو تشخیص بدم و پین 📌 و وین 🎉 رو با افتخار اعلام کنم!\n\nبا دستور /setset در گروه هم می‌تونی نوع ست رو مشخص کنی!";
    bot("sendMessage",["chat_id"=>$chat_id,"text"=>$start_text]);
    if($chat_id != $admin_id) exit;
}

/*================ ADMIN PANEL =================*/
if($message && $chat_id==$admin_id){
    if($data["waiting_block"]===true){
        if(is_numeric($text) && !in_array($text,$data["blocked"])) $data["blocked"][]=$text;
        $data["waiting_block"]=false;
        bot("sendMessage",["chat_id"=>$chat_id,"text"=>"✅ کاربر $text بلاک شد"]);
        file_put_contents("data.json",json_encode($data));
        exit;
    }
    if($data["waiting_unblock"]===true){
        if(is_numeric($text)) $data["blocked"]=array_diff($data["blocked"],[$text]);
        $data["waiting_unblock"]=false;
        bot("sendMessage",["chat_id"=>$chat_id,"text"=>"✅ کاربر $text آن‌بلاک شد"]);
        file_put_contents("data.json",json_encode($data));
        exit;
    }
    if($data["waiting_block_group"]===true){
        if(!isset($data["blocked_groups"])) $data["blocked_groups"] = [];
        if(!in_array($text,$data["blocked_groups"])) $data["blocked_groups"][]=$text;
        $data["groups"]=array_diff($data["groups"],[$text]);
        $data["pending_groups"]=array_diff($data["pending_groups"],[$text]);
        $data["waiting_block_group"]=false;
        bot("sendMessage",["chat_id"=>$chat_id,"text"=>"✅ گروه $text بلاک شد و از لیست‌های فعال حذف گردید."]);
        file_put_contents("data.json",json_encode($data));
        exit;
    }
    if($data["waiting_send_all"]===true){
        $data["waiting_send_all"]=false;
        file_put_contents("data.json",json_encode($data));
        bot("sendMessage",["chat_id"=>$chat_id,"text"=>"⏳ پیام همگانی در حال ارسال به گروه‌ها و کاربران است..."]);
        foreach($data["groups"] as $g_id) bot("sendMessage",["chat_id"=>$g_id,"text"=>$text]);
        foreach(($data["users"] ?? []) as $u_id){
            if(!in_array($u_id, $data["blocked"])) bot("sendMessage",["chat_id"=>$u_id,"text"=>$text]);
        }
        bot("sendMessage",["chat_id"=>$chat_id,"text"=>"📢 پیام همگانی با موفقیت به تمام گروه‌ها و کاربران ارسال شد."]);
        exit;
    }
    if($text=="/panel"){
        $keyboard = [
            "inline_keyboard"=>[
                [["text"=>"لیست گروه‌ها","callback_data"=>"list_groups"],["text"=>"لیست درخواست‌ها","callback_data"=>"list_pending"]],
                [["text"=>"بلاک کاربر","callback_data"=>"block_user"],["text"=>"آن‌بلاک کاربر","callback_data"=>"unblock_user"]],
                [["text"=>"📊 آمار ربات","callback_data"=>"bot_stats"],["text"=>"📢 پیام همگانی","callback_data"=>"send_all"]],
                [["text"=>"🚫 بلاک کردن گروه","callback_data"=>"block_group"]]
            ]
        ];
        bot("sendMessage",["chat_id"=>$chat_id,"text"=>"🎛 پنل مدیریت فعال شد 👇","reply_markup"=>json_encode($keyboard)]);
        exit;
    }
}

/*================ GROUP CHECK & COMMANDS =================*/
if($message && ($chat_type=="group" || $chat_type=="supergroup")){
    if(in_array($chat_id,$data["blocked_groups"] ?? [])) exit;
    
    // درخواست عضویت گروه جدید
    if(!in_array($chat_id,$data["groups"]) && !in_array($chat_id,$data["pending_groups"]) && !in_array($chat_id,$data["rejected_groups"] ?? [])){
        $data["pending_groups"][]=$chat_id;
        bot("sendMessage",[
            "chat_id"=>$admin_id,
            "text"=>"📢 گروه جدید درخواست فعالسازی:\nID: $chat_id",
            "reply_markup"=>json_encode(["inline_keyboard"=>[[["text"=>"✅ تایید","callback_data"=>"approve_$chat_id"],["text"=>"❌ رد","callback_data"=>"reject_$chat_id"]]]])
        ]);
        file_put_contents("data.json",json_encode($data));
        exit;
    }

    // دستور تغییر نوع ست در گروه توسط ادمین گروه
    if(strpos($text, "/setset") === 0){
        if(isAdmin($chat_id, $from_id, $admin_id)){
            $set_keyboard = [
                "inline_keyboard" => [
                    [
                        ["text" => "کازینو 777 🎰", "callback_data" => "settype_777"],
                        ["text" => "لیمو 🍋", "callback_data" => "settype_lemon"]
                    ],
                    [
                        ["text" => "انگور 🍇", "callback_data" => "settype_grape"],
                        ["text" => "بار BAR 💎", "callback_data" => "settype_bar"]
                    ]
                ]
            ];
            bot("sendMessage", [
                "chat_id" => $chat_id,
                "text" => "⚙️ ادمین گرامی، لطفاً نوع ستی که ربات باید تشخیص دهد را انتخاب کنید:",
                "reply_to_message_id" => $message["message_id"],
                "reply_markup" => json_encode($set_keyboard)
            ]);
        } else {
            bot("sendMessage", [
                "chat_id" => $chat_id,
                "text" => "❌ این دستور فقط مخصوص ادمین‌های گروه است.",
                "reply_to_message_id" => $message["message_id"]
            ]);
        }
        exit;
    }
}

/*================ SLOT DETECTOR =================*/
if(isset($message["dice"]) && ($chat_type=="group" || $chat_type=="supergroup")){
    if(in_array($chat_id,$data["blocked_groups"] ?? [])) exit;
    if(!in_array($chat_id, $data["groups"])) exit; // فقط در گروه‌های تایید شده کار کند

    if($message["dice"]["emoji"] == "🎰"){
        $dice_val = $message["dice"]["value"];
        $current_set = $data["group_sets"][$chat_id] ?? "777"; // پیش‌فرض روی 777 تنظیم است
        
        $is_winner = false;
        $win_title = "";
        $detected_type = "";

        // فرمول تفکیک ۳ المان همسان بر اساس استانداردهای تلگرام
        if($dice_val == 64){
            $detected_type = "777";
            $win_title = "کازینو 777 🎰";
        } elseif(($dice_val - 1) % 21 == 0){
            $type_index = ($dice_val - 1) / 21;
            if($type_index == 0){
                $detected_type = "bar";
                $win_title = "بار BAR 💎";
            } elseif($type_index == 1){
                $detected_type = "grape";
                $win_title = "انگور 🍇";
            } elseif($type_index == 2){
                $detected_type = "lemon";
                $win_title = "لیمو 🍋";
            }
        }

        // بررسی انطباق ست آورده شده با ست هدف تنظیم شده گروه
        if($detected_type == $current_set){
            $is_winner = true;
        }

        if($is_winner){
            $msg_id = $message["message_id"];
            
            // آماده‌سازی متن ارسالی بدون تداخل مارک‌داون جهت تضمین ارسال قطعی به گروه
            $win_text = "تبریک ست " . $win_title . " آوردی و برنده شدی 🎉\n\n"
                      . "👤 کاربر: " . $user_display . "\n"
                      . "🆔 آیدی عددی: " . $from_id;
            
            // ارسال پیام تبریک مستقیم و ریپلای روی تاس کاربر در داخل گروه
            bot("sendMessage",[
                "chat_id" => $chat_id,
                "reply_to_message_id" => $msg_id,
                "text" => $win_text
            ]);
            
            // پین کردن پیام تاس برنده در گروه
            bot("pinChatMessage",[
                "chat_id" => $chat_id,
                "message_id" => $msg_id,
                "disable_notification" => true
            ]);
            
            // ارسال آمار گزارش به پیوی ادمین اصلی ربات جهت اطلاع
            bot("sendMessage",[
                "chat_id" => $admin_id,
                "text" => "🏆 کاربر $user_display (ID: $from_id) در گروه $chat_id با ست هدف $win_title برنده شد.",
                "parse_mode" => "HTML"
            ]);
        }
    }
}

file_put_contents("data.json",json_encode($data));
?>