import discord
from discord import app_commands
from discord.ext import commands, tasks
import logging
import asyncio
from datetime import datetime, timedelta
import config
from database import db
from utils.security import format_money_string

logger = logging.getLogger("gamble_bot.cogs.tickets")

# Channel IDs where the AI assistant is muted because a human staff member is handling it
muted_tickets = set()

class TicketControlView(discord.ui.View):
    """Control buttons inside an active ticket channel."""
    def __init__(self):
        super().__init__(timeout=None)

    @discord.ui.button(label="Talebi Kapat", style=discord.ButtonStyle.danger, emoji="🔒", custom_id="ticket_close_btn")
    async def close_ticket(self, interaction: discord.Interaction, button: discord.ui.Button):
        channel_id = interaction.channel.id
        muted_tickets.discard(channel_id)

        await interaction.response.send_message("🔒 **Destek talebi kapatılıyor, kanal 5 saniye içinde silinecektir...**")
        await asyncio.sleep(5.0)
        try:
            await interaction.channel.delete(reason=f"Ticket closed by {interaction.user.name}")
        except Exception as e:
            logger.error(f"Error closing ticket channel: {e}")

    @discord.ui.button(label="Yetkili Çağır", style=discord.ButtonStyle.secondary, emoji="👤", custom_id="ticket_call_staff_btn")
    async def call_staff(self, interaction: discord.Interaction, button: discord.ui.Button):
        channel_id = interaction.channel.id
        muted_tickets.add(channel_id) # Mute AI permanently for this ticket

        guild = interaction.guild
        staff_role = discord.utils.get(guild.roles, name="Gamble Yetkilisi") or \
                     discord.utils.get(guild.roles, name="🛡️ Yönetici") or \
                     discord.utils.get(guild.roles, name="👮 Yetkili")
        
        mention_str = staff_role.mention if staff_role else "@here"
        
        embed = discord.Embed(
            title="👨‍💼 Yetkili Çağrıldı & Bot Sessize Alındı",
            description=(
                f"Selam {interaction.user.mention}! Hemen yetkili ekibimize haber verdim.\n\n"
                f"🤫 **Yapay zeka asistanı sessize alındı.** Artık araya girmeyeceğim, birazdan yetkili arkadaşlarımız bizzat seninle ilgilenecektir."
            ),
            color=discord.Color.orange(),
            timestamp=datetime.utcnow()
        )
        embed.set_footer(text="Yetkili bekleniyor • KolicGamble")
        await interaction.response.send_message(content=mention_str, embed=embed)


async def create_ticket_channel(interaction: discord.Interaction, category_key: str = "genel"):
    """Helper function to create a private ticket channel tailored to the selected category."""
    guild = interaction.guild
    user = interaction.user

    channel_name = f"ticket-{user.name.lower().replace(' ', '-')}"
    existing = discord.utils.get(guild.text_channels, name=channel_name)
    if existing:
        if not interaction.response.is_done():
            await interaction.response.send_message(
                f"❌ Zaten açık bir destek talebin var dostum: {existing.mention}",
                ephemeral=True
            )
        else:
            await interaction.followup.send(
                f"❌ Zaten açık bir destek talebin var dostum: {existing.mention}",
                ephemeral=True
            )
        return

    if not interaction.response.is_done():
        await interaction.response.defer(ephemeral=True)

    try:
        category = discord.utils.get(guild.categories, name="🎫 DESTEK TALEPLERİ")
        if not category:
            category = await guild.create_category("🎫 DESTEK TALEPLERİ", reason="Ticket sistemi kurulumu")

        staff_role = discord.utils.get(guild.roles, name="Gamble Yetkilisi")
        admin_role = discord.utils.get(guild.roles, name="🛡️ Yönetici")
        yetkili_role = discord.utils.get(guild.roles, name="👮 Yetkili")

        overwrites = {
            guild.default_role: discord.PermissionOverwrite(view_channel=False),
            user: discord.PermissionOverwrite(view_channel=True, send_messages=True, attach_files=True, embed_links=True),
            guild.me: discord.PermissionOverwrite(view_channel=True, send_messages=True, manage_channels=True)
        }
        if staff_role: overwrites[staff_role] = discord.PermissionOverwrite(view_channel=True, send_messages=True)
        if admin_role: overwrites[admin_role] = discord.PermissionOverwrite(view_channel=True, send_messages=True)
        if yetkili_role: overwrites[yetkili_role] = discord.PermissionOverwrite(view_channel=True, send_messages=True)

        ticket_channel = await guild.create_text_channel(
            name=channel_name,
            category=category,
            topic=f"Destek Talebi Sahibi: {user.name} ({user.id}) | Kategori: {category_key.upper()}",
            overwrites=overwrites,
            reason=f"Support ticket opened by {user.name} [{category_key}]"
        )

        # Look up user info for personalized greeting
        user_db = await db.get_user(user.id)
        linked_name = user_db.get("game_username", "*Bağlanmamış*") if user_db else "*Bağlanmamış*"
        balance = user_db.get("balance", 0.0) if user_db else 0.0

        # Topic tailored greetings
        category_titles = {
            "bakiye": "📥 Bakiye & Para İşlemleri",
            "eslestirme": "🔗 Hesap Eşleştirme & Kod Yardımı",
            "sikayet": "🚨 Şikayet & Kural İhlali",
            "genel": "💡 Genel Soru & Destek"
        }
        cat_title = category_titles.get(category_key, "💡 Genel Destek")

        if category_key == "bakiye":
            cat_desc = (
                f"**Konu:** {cat_title}\n\n"
                f"Selam {user.mention}! Bakiye yükleme, çekme veya ödeme gecikmesiyle ilgili sorunu buraya yazabilirsin.\n"
                f"• **Bağlı Minecraft Karakterin:** `{linked_name}`\n"
                f"• **Güncel Bakiyen:** 💰 **{format_money_string(balance)}**\n\n"
                f"Eğer para gönderdiysen veya çektiysen detayları (ne zaman attın, ne kadar) yazarsan hemen inceleyelim!"
            )
        elif category_key == "eslestirme":
            cat_desc = (
                f"**Konu:** {cat_title}\n\n"
                f"Selam {user.mention}! Minecraft hesabını bağlamakta sorun yaşıyorsan doğru yerdesin.\n"
                f"• **Bağlı Hesap Durumu:** `{linked_name}`\n\n"
                f"Hesap bağlamak için `<#1537587712461377627>` kanalındaki **🔗 Hesap Eşleştir** butonundan kod alıp oyunda `/msg KolicGambleBot onay <kod>` yazman yeterlidir. Sorun olursa hemen sorabilirsin!"
            )
        elif category_key == "sikayet":
            cat_desc = (
                f"**Konu:** {cat_title}\n\n"
                f"Selam {user.mention}. Bir oyuncuyu veya kural ihlalini bildirmek için lütfen şikayetçi olduğun kişinin adını, olayın detayını ve varsa ekran görüntüsü/kanıtını buraya ilet.\n\n"
                f"*(Bu konu yetkili ekibimize özel olarak iletilecektir.)*"
            )
        else:
            cat_desc = (
                f"**Konu:** {cat_title}\n\n"
                f"Selam {user.mention}! KolicGamble canlı destek odana hoş geldin.\n"
                f"• **Karakterin:** `{linked_name}` | **Bakiyen:** 💰 **{format_money_string(balance)}**\n\n"
                f"Aklına takılan her şeyi rahatça sorabilirsin, sana hemen yardımcı olayım!"
            )

        welcome_embed = discord.Embed(
            title=f"🎫 Destek Talebi: {user.display_name}",
            description=cat_desc + "\n\n*(Eğer insan bir yetkiliyle görüşmek istersen **`👤 Yetkili Çağır`** butonuna basabilirsin.)*",
            color=discord.Color.blue(),
            timestamp=datetime.utcnow()
        )
        welcome_embed.set_footer(text="KolicAI Canlı Destek • 7/24 Aktif")

        await ticket_channel.send(content=f"{user.mention}", embed=welcome_embed, view=TicketControlView())
        await interaction.followup.send(f"✅ Destek odan açıldı: {ticket_channel.mention}", ephemeral=True)

    except Exception as e:
        logger.error(f"Error creating ticket channel: {e}", exc_info=True)
        if interaction.response.is_done():
            await interaction.followup.send("❌ Destek talebi açılırken bir sorun oluştu.", ephemeral=True)
        else:
            await interaction.response.send_message("❌ Destek talebi açılırken bir sorun oluştu.", ephemeral=True)


class TicketCategorySelect(discord.ui.Select):
    """Dropdown menu allowing users to pick the ticket category."""
    def __init__(self):
        options = [
            discord.SelectOption(
                label="Bakiye & Para İşlemleri",
                description="Para yatırma, para çekme veya transfer sorunları",
                emoji="📥",
                value="bakiye"
            ),
            discord.SelectOption(
                label="Hesap Eşleştirme & Kod",
                description="Minecraft hesabını bağlama ve onay kodu yardımı",
                emoji="🔗",
                value="eslestirme"
            ),
            discord.SelectOption(
                label="Şikayet & Kural İhlali",
                description="Hile, dolandırıcılık veya kural ihlali bildirimi",
                emoji="🚨",
                value="sikayet"
            ),
            discord.SelectOption(
                label="Genel Soru & Bilgi",
                description="Oyunlar, kurallar veya sunucu hakkında sorular",
                emoji="💡",
                value="genel"
            )
        ]
        super().__init__(
            placeholder="📌 Destek almak istediğiniz konuyu seçin...",
            min_values=1,
            max_values=1,
            options=options,
            custom_id="ticket_category_select",
            row=0
        )

    async def callback(self, interaction: discord.Interaction):
        selected_category = self.values[0]
        await create_ticket_channel(interaction, selected_category)


class TicketCreateView(discord.ui.View):
    """Persistent panel view with both Dropdown and Direct Open Button."""
    def __init__(self):
        super().__init__(timeout=None)
        self.add_item(TicketCategorySelect())

    @discord.ui.button(label="Hızlı Destek Talebi Aç", style=discord.ButtonStyle.success, emoji="📩", custom_id="ticket_create_btn", row=1)
    async def open_ticket_direct(self, interaction: discord.Interaction, button: discord.ui.Button):
        await create_ticket_channel(interaction, "genel")


class TicketsCog(commands.Cog, name="Canlı Destek & Ticket"):
    def __init__(self, bot):
        self.bot = bot
        self.check_inactive_tickets.start()

    def cog_unload(self):
        self.check_inactive_tickets.cancel()

    # --- 5. AUTOMATIC INACTIVITY CLOSER (24 Hours) ---
    @tasks.loop(minutes=30)
    async def check_inactive_tickets(self):
        """Periodically scans open ticket channels and auto-closes those with 24h of inactivity."""
        logger.debug("Checking open tickets for 24h inactivity...")
        for guild in self.bot.guilds:
            for channel in guild.text_channels:
                if channel.name.startswith("ticket-"):
                    try:
                        last_msg = None
                        async for msg in channel.history(limit=1):
                            last_msg = msg
                            break

                        now = datetime.utcnow()
                        ref_time = last_msg.created_at.replace(tzinfo=None) if last_msg else channel.created_at.replace(tzinfo=None)

                        if now - ref_time > timedelta(hours=24):
                            embed = discord.Embed(
                                title="⏰ Otomatik Kapanış (24 Saat İnaktiflik)",
                                description=(
                                    "Bu destek odasında **24 saattir** hiçbir mesaj yazılmadığı için talep otomatik olarak kapatılıyor.\n\n"
                                    "İhtiyaç duyduğunuzda `<#1537587712461377627>` veya `🎫・destek-talebi` kanalından yeni bir talep açabilirsiniz."
                                ),
                                color=discord.Color.red(),
                                timestamp=datetime.utcnow()
                            )
                            try:
                                await channel.send(embed=embed)
                                await asyncio.sleep(5.0)
                                muted_tickets.discard(channel.id)
                                await channel.delete(reason="Auto-closed due to 24h inactivity")
                                logger.info(f"Auto-closed inactive ticket: {channel.name}")
                            except Exception as del_err:
                                logger.warning(f"Failed to delete inactive ticket channel {channel.name}: {del_err}")
                    except Exception as e:
                        logger.debug(f"Error scanning ticket {channel.name}: {e}")

    def is_crown_owner(self, interaction: discord.Interaction) -> bool:
        return bool(interaction.guild and interaction.user.id == interaction.guild.owner_id)

    @app_commands.command(name="destek_paneli_kur", description="Destek talebi açma menüsünün bulunduğu paneli kanala gönderir.")
    async def setup_ticket_panel(self, interaction: discord.Interaction):
        if not self.is_crown_owner(interaction):
            await interaction.response.send_message("❌ **Yetkisiz Erişim:** Bu komutu sadece sunucu sahibi (Taç sahibi) kullanabilir!", ephemeral=True)
            return

        embed = discord.Embed(
            title="🎫 KolicGamble Canlı Destek & İletişim",
            description=(
                "Bakiye yükleme/çekme, hesap eşleştirme, kural şikayetleri veya aklınıza takılan sorular için canlı destek talebi açabilirsiniz.\n\n"
                "🤖 **7/24 Akıllı Destek:**\n"
                "Aşağıdaki menüden konunuzu seçtiğiniz anda yapay zeka asistanımız özel odanızı hazırlar ve anında yardımcı olur.\n\n"
                "👨‍💼 **Yetkili Ekibi:**\n"
                "Dilediğiniz an tek tıkla insan yetkili çağırabilirsiniz.\n\n"
                "👇 *Lütfen aşağıdaki menüden destek almak istediğiniz konuyu seçin:*",
            ),
            color=discord.Color.green(),
            timestamp=datetime.utcnow()
        )
        embed.set_footer(text="Güvenli Destek Altyapısı • KolicGamble")
        
        await interaction.response.send_message("Destek paneli kuruluyor...", ephemeral=True)
        await interaction.channel.send(embed=embed, view=TicketCreateView())

    def normalize_turkish(self, text: str) -> str:
        """Converts Turkish characters and removes punctuation for flexible NLP matching."""
        tr_map = str.maketrans("çğıöşüİIÇĞİÖŞÜ", "cgiosuiicgiosu")
        return text.lower().translate(tr_map)

    # --- ADVANCED HUMAN-LIKE AI SUPPORT ASSISTANT MESSAGE LISTENER ---
    @commands.Cog.listener()
    async def on_message(self, message: discord.Message):
        if message.author.bot or not message.guild:
            return
        
        if not message.channel.name.startswith("ticket-"):
            return

        channel_id = message.channel.id

        # If ticket is already muted by staff call, don't speak at all!
        if channel_id in muted_tickets:
            return

        # If a staff member or administrator sends a message in the ticket channel, mute the AI so it doesn't interrupt humans
        is_staff = message.author.guild_permissions.administrator or any(
            role.name in ["Gamble Yetkilisi", "🛡️ Yönetici", "👮 Yetkili", "Kurucu"] for role in getattr(message.author, "roles", [])
        )
        if is_staff and not message.channel.name.endswith(message.author.name.lower().replace(' ', '')):
            muted_tickets.add(channel_id)
            return

        content = message.content.strip()
        if not content:
            return

        norm = self.normalize_turkish(content)

        # --- PROFANITY & SWEAR DETECTION (10 MIN TIMEOUT) ---
        import re
        profanity_patterns = [
            r"\b(amk|aq|a\.m\.k|o\.c|oc|orospu|orospucocugu|pic|picler|sik|sikeyim|sikerim|sikik|siktir|siktirgit|yarrak|yarak|gotlek|kahpe|pezevenk|ebenin|anani|ananin|anneni|dalyarak|ibne|pust|tasak|amcik)\b",
            r"(orospu|siktir|gotveren|amcik|yarrak|pezevenk|piclik)"
        ]
        
        has_profanity = any(re.search(pat, norm) for pat in profanity_patterns)
        member = message.author if isinstance(message.author, discord.Member) else message.guild.get_member(message.author.id)

        if has_profanity and member and not member.guild_permissions.administrator:
            try:
                await member.timeout(timedelta(minutes=10), reason="Destek talebinde küfür / uygunsuz dil kullanımı")
            except Exception as timeout_err:
                logger.warning(f"Could not apply timeout to {member}: {timeout_err}")

            warning_embed = discord.Embed(
                title="⚠️ Uygunsuz Dil & Küfür Tespiti (10 Dk Timeout)",
                description=(
                    f"**{member.mention}, destek talebinde küfür ve hakaret içerikli ifadeler kullandığınız için sistem tarafından 10 dakika boyunca susturuldunuz (Timeout)!**\n\n"
                    f"🛑 **Kural Hatırlatması:**\n"
                    f"Yetkililerle ve destek asistanıyla iletişim kurarken daima saygılı ve nezih bir dil kullanmalısınız. "
                    f"Süreniz dolduğunda destek almaya devam edebilirsiniz."
                ),
                color=discord.Color.red(),
                timestamp=datetime.utcnow()
            )
            warning_embed.set_footer(text="KolicAI Güvenlik & Otomatik Moderasyon")
            
            await message.channel.send(content=f"{member.mention}", embed=warning_embed)

            # Log to database suspicious_logs
            await db.log_suspicious_activity(
                member.id,
                member.name,
                "TICKET_PROFANITY_TIMEOUT",
                f"Kanal: {message.channel.name} | Mesaj: {content}"
            )
            return

        # Check if user explicitly asked for staff/human
        if any(w in norm for w in ["yetkili", "admin", "kurucu", "insan", "biri bak", "biri gelsin", "yetkili cagir", "canli destek"]):
            muted_tickets.add(channel_id)
            guild = message.guild
            staff_role = discord.utils.get(guild.roles, name="Gamble Yetkilisi") or \
                         discord.utils.get(guild.roles, name="🛡️ Yönetici") or \
                         discord.utils.get(guild.roles, name="👮 Yetkili")
            mention_str = staff_role.mention if staff_role else "@here"
            
            async with message.channel.typing():
                await asyncio.sleep(1.0)
                await message.channel.send(
                    f"Anladım {message.author.mention}, hemen yetkili arkadaşlarıma haber veriyorum. Ben sessize geçtim, birazdan ilgilenecekler! 👋\n{mention_str}"
                )
            return

        # Natural human-like response generation with deep database diagnostic analysis
        async with message.channel.typing():
            await asyncio.sleep(1.2)
            reply_text = await self.generate_human_ai_response(message.author, content, norm)
            if reply_text:
                await message.channel.send(reply_text)

    async def generate_human_ai_response(self, user: discord.User, query: str, norm: str) -> str:
        """Formulates ultra-detailed, natural, diagnostic Turkish support responses."""
        user_db = await db.get_user(user.id)
        linked_mc = user_db.get("game_username") if user_db else None
        balance = user_db.get("balance", 0.0) if user_db else 0.0
        last_daily = user_db.get("last_daily") if user_db else None

        recent_txs = await db.fetch(
            "SELECT * FROM economy_transactions WHERE discord_id = ? ORDER BY id DESC LIMIT 3" if config.USE_SQLITE else \
            "SELECT * FROM economy_transactions WHERE discord_id = $1 ORDER BY id DESC LIMIT 3",
            user.id
        )

        pending_withdraw = await db.fetchrow(
            "SELECT * FROM economy_transactions WHERE discord_id = ? AND type = 'withdraw' AND status = 'pending' ORDER BY id DESC LIMIT 1" if config.USE_SQLITE else \
            "SELECT * FROM economy_transactions WHERE discord_id = $1 AND type = 'withdraw' AND status = 'pending' ORDER BY id DESC LIMIT 1",
            user.id
        )

        # GREETINGS / HAL HATIR
        if any(norm == g for g in ["sa", "selam", "selamun aleykum", "selamunaleykum", "merhaba", "slm", "hey", "naber", "nasilsin", "gunaydin", "iyi aksamlar", "iyi gunler"]):
            return (
                f"Aleykümselam {user.mention}! İyiyim çok şükür, sen nasılsın? 😊\n"
                f"Sana nasıl yardımcı olabilirim? Bakiye yatırma/çekme, hesap eşleştirme, geçmiş işlemlerin veya oyun kuralları hakkında aklına takılan her şeyi sorabilirsin, detaylıca anlatırım!"
            )

        # DIAGNOSTIC: "PARAM GELMEDİ" / "YATIRDIM GELMEDİ" / "ÇEKTİM GELMEDİ" / "BEKLİYOR"
        if any(k in norm for k in ["gelmedi", "yatti mi", "yatmadi", "bekliyor", "ne oldu param", "islemim", "gecikti"]):
            if pending_withdraw:
                amt = float(pending_withdraw["amount"])
                tx_id = pending_withdraw["id"]
                return (
                    f"Selam {user.mention}! Sistem kayıtlarına baktım:\n\n"
                    f"🔍 **Bekleyen Para Çekme İşlemin Bulunuyor (TX #{tx_id}):**\n"
                    f"• **Çekilen Tutar:** 💰 **{format_money_string(amt)}** ({amt:,.2f})\n"
                    f"• **Durum:** ⌛ Yetkili Onay Kuyruğunda\n\n"
                    f"💡 Çekim tutarın **500M limitinin üzerinde** olduğu için güvenlik amacıyla yetkili onayına gönderilmiş. "
                    f"Yetkililerimiz `<#1537587726373617807>` kanalından onayladığı anda paran oyun içindeki `{pending_withdraw.get('game_username', linked_mc)}` hesabına otomatik olarak aktarılacaktır. Hiç merak etme!"
                )

            if recent_txs:
                last_tx = recent_txs[0]
                t_type = "Para Yatırma" if last_tx["type"] == "deposit" else ("Para Çekme" if last_tx["type"] == "withdraw" else last_tx["type"])
                t_amount = float(last_tx["amount"])
                t_status = "Tamamlandı ✅" if last_tx["status"] == "completed" else last_tx["status"]
                
                return (
                    f"Selam {user.mention}! Hesabının son işlem geçmişini inceledim:\n\n"
                    f"📋 **Son İşlemin:**\n"
                    f"• **Tür:** {t_type}\n"
                    f"• **Tutar:** **{format_money_string(t_amount)}**\n"
                    f"• **Durum:** {t_status}\n\n"
                    f"Eğer oyundan bota `/pay` attığın halde bakiyen yansımadıysa şunları kontrol edelim:\n"
                    f"1. Parayı tam olarak **`KolicGambleBot`** adına mı gönderdin?\n"
                    f"2. Minecraft'ta bağlı olduğun kullanıcı adın (**`{linked_mc or 'Bağlı Değil'}`**) ile oyundaki adın birebir aynı mı?\n"
                    f"3. Botun oyunda açık olup olmadığını `<#1537587704261386350>` (bot-durumu) kanalından kontrol edebilirsin.\n\n"
                    f"Sorun devam ediyorsa **`👤 Yetkili Çağır`** butonuna bas, yetkilimiz hemen logları incelesin!"
                )

        # 1. INTENT: PARA YATIRMA / YÜKLEME / DEPOSIT
        deposit_keywords = [
            "yatir", "yukle", "yukli", "deposit", "depo", "odedim", "pay attim", "para attim",
            "para yolladim", "nasil yuklenir", "nasil yatirilir", "bakiye yukle", "para yukle",
            "bakiye nasil", "para nasil", "nasil bakiye", "nasil para", "para nasil atilir",
            "para nasil yollanir", "bakiye yukleme", "para yatirma", "para yuklicem", "bakiye yuklicem"
        ]
        if any(k in norm for k in deposit_keywords):
            if not linked_mc:
                return (
                    f"Selam {user.mention}! Para yüklemek tamamen otomatik ve çok kolaydır, ama önce hesabını Minecraft karakterinle bağlaman gerekiyor.\n\n"
                    f"**Adım Adım Para Yükleme:**\n"
                    f"1. `<#1537587712461377627>` (bakiye-islemleri) kanalına git ve **🔗 Hesap Eşleştir** butonuna tıkla.\n"
                    f"2. Minecraft kullanıcı adını yaz ve onayla. Bot sana 6 haneli bir kod verecek (Örn: `482910`).\n"
                    f"3. Minecraft sunucusuna girip (`kolichub.net`) bota şu mesajı yaz:\n"
                    f"   👉 **`/msg KolicGambleBot onay <kod>`**\n"
                    f"4. Eşleştirme tamamlandıktan sonra bota dilediğin tutarı gönder:\n"
                    f"   👉 **`/pay KolicGambleBot <Miktar>`** *(Örn: `/pay KolicGambleBot 10000000` veya `/pay KolicGambleBot 10m`)*\n\n"
                    f"⚡ Bot transferi algıladığı an (yaklaşık 2 saniyede) Discord bakiyeni otomatik günceller ve sana özel mesajla (DM) bildirim atar!"
                )
            else:
                return (
                    f"Selam {user.mention}! Hesabına baktım, sistemde Minecraft adın zaten **`{linked_mc}`** olarak bağlı. 👍\n\n"
                    f"**Para Yükleme Adımları:**\n"
                    f"1. Minecraft sunucusuna bağlan (`kolichub.net`).\n"
                    f"2. Bota oyun içinden `/pay` komutuyla para gönder:\n"
                    f"   👉 **`/pay KolicGambleBot <Miktar>`** *(Örn: `/pay KolicGambleBot 50m` veya `/pay KolicGambleBot 50000000`)*\n\n"
                    f"💵 Ödemeyi yaptığın anda bot saniyeler içinde paranı Discord cüzdanına aktaracaktır.\n"
                    f"Herhangi bir takılma yaşarsan buraya yazabilirsin!"
                )

        # 2. INTENT: PARA ÇEKME / WITHDRAW
        withdraw_keywords = [
            "cek", "cekme", "cekic", "cekey", "withdraw", "cektim", "cekim", "parami al",
            "para cek", "bakiye cek", "nasil cekilir", "cekme nasil", "cekemedim", "para cekicem"
        ]
        if any(k in norm for k in withdraw_keywords):
            if not linked_mc:
                return (
                    f"{user.mention} kral, para çekebilmek için önce hesabını Minecraft karakterinle bağlamış olman gerekiyor.\n"
                    f"`<#1537587712461377627>` kanalındaki **🔗 Hesap Eşleştir** butonundan hesabını 30 saniyede bağlayabilirsin."
                )
            else:
                return (
                    f"Selam {user.mention}! Para çekme işlemiyle ilgili tüm detaylar şöyle:\n\n"
                    f"📊 **Mevcut Durumun:**\n"
                    f"• **Çekilebilir Bakiyen:** 💰 **{format_money_string(balance)}**\n"
                    f"• **Ödemenin Gideceği Hesap:** `{linked_mc}`\n\n"
                    f"**Nasıl Çekilir?**\n"
                    f"1. `<#1537587712461377627>` (bakiye-islemleri) kanalına git.\n"
                    f"2. **📤 Para Çek (Withdraw)** butonuna bas.\n"
                    f"3. Çekmek istediğin miktarı yaz (Örn: `100k`, `25m`, `500m`, `1b`).\n\n"
                    f"🛡️ **Limit & Onay Kuralı:**\n"
                    f"• **500M altındaki çekimler:** Hiç yetkili beklemeden anında ve otomatik oyun içi hesabına yatar.\n"
                    f"• **500M ve üzeri çekimler:** Güvenlik amacıyla `<#1537587726373617807>` yetkili kanalına onay talebi olarak düşer ve yetkililer onayladığı an hesabına geçer."
                )

        # 3. INTENT: HESAP EŞLEŞTİRME / LINKING
        link_keywords = ["esle", "link", "bagla", "onay", "kod nere", "hesap nasil", "karakter nasil", "kayit", "baglanti"]
        if any(k in norm for k in link_keywords):
            return (
                f"Hesap eşleştirmeyi adım adım şöyle yapıyoruz {user.mention}:\n\n"
                f"1. `<#1537587712461377627>` kanalına git ve **🔗 Hesap Eşleştir** butonuna tıkla.\n"
                f"2. Açılan pencereye Minecraft'taki kullanıcı adını tam ve doğru olarak yazıp gönder.\n"
                f"3. Bot sana 6 haneli özel bir onay kodu verecek (Kod 5 dakika geçerlidir).\n"
                f"4. Minecraft sunucusuna (`kolichub.net`) girip bota şu komutu yaz:\n"
                f"   👉 **`/msg KolicGambleBot onay <kod>`**\n\n"
                f"Bunu yaptığın an hesabın başarıyla eşleşir ve bot sana Discord'dan özel mesajla (DM) onay mesajı atar. Artık para yatırıp çekebilirsin!"
            )

        # 4. INTENT: GÜNLÜK ÖDÜL / ETKİNLİK
        daily_keywords = ["gunluk", "daily", "bedava", "bonus", "ucretsiz", "hediye"]
        if any(k in norm for k in daily_keywords):
            return (
                f"Selam {user.mention}! Sunucumuzda sabit günlük ödül yerine **`🎁・etkinlikler`** kanalında devasa ödüllü **Çekilişler** ve **Anlık Para Yağmurları** düzenlenmektedir!\n\n"
                f"• Bildirimleri açarak para yağmurlarını ilk sen kapabilir ve çekilişlere katılabilirsin."
            )

        # 5. INTENT: OYUNLAR & KURALLAR & STRATEJİ
        games_keywords = ["oyun", "kumar", "crash", "rulet", "blackjack", "slot", "kasa", "mayin", "mines", "nasil oynan", "bahis", "taktik", "oran"]
        if any(k in norm for k in games_keywords):
            return (
                f"🎰 **KolicGamble Oyun Rehberi & Kuralları ({user.mention}):**\n\n"
                f"Tüm oyunlar `<#1537587714080378910>` kanalında butonlarla canlı oynanır:\n\n"
                f"• 🪙 **Coinflip:** %50 şanslı klasik yazı-tura. Kazanırsan tam 2 katı (2x) öder.\n"
                f"• 🃏 **Blackjack (21):** Krupiyeye karşı kart çekersin. 21'e krupiyeden daha yakın olursan kazanırsın. İlk elde 'İkiye Katla (Double)' hakkın vardır.\n"
                f"• 🚀 **Crash (Aviator):** Uçak kalkışa geçer ve çarpan 1.00x'den 100.00x+'a kadar yükselir. Uçak havada infilak etmeden önce 'Parayı Çek' butonuna basmalısın!\n"
                f"• 🎰 **Slots:** 3 makara döner. 777 (10x), Elmas (7x), Çan (5x), Üzüm (3x) verir. 2'li eşleşmelerde de teselli kazancı öder.\n"
                f"• 🎡 **Rulet:** Kırmızı/Siyah (2x), Yeşil (14x) veya doğrudan sayı tahminine (36x) bahis yapabilirsin.\n"
                f"• 📦 **Kasalar:** CS:GO tarzı 5 farklı kasa (Başlangıç, Şövalye, Siber, Kozmik, Poseidon). Canlı dönen çarktan dev çarpanlı eşyalar çıkar!\n"
                f"• 💣 **Mayın Tarlası (Mines):** 16 karelik alanda 1 ile 10 arası mayın belirlersin. Her açtığın temiz elmas çarpanı katlar, istediğin an paranı çekebilirsin.\n\n"
                f"🍀 Bol şanslar kral! Kasayı katlaman dileğiyle."
            )

        # 6. INTENT: SUNUCU VE BOT BİLGİSİ / IP
        server_keywords = ["ip", "sunucu", "surum", "port", "kolichub", "bot nerede", "bot acik mi", "bot kapali"]
        if any(k in norm for k in server_keywords):
            return (
                f"🌐 **Minecraft Sunucu & Bot Bilgileri:**\n\n"
                f"• **Sunucu IP:** `kolichub.net` (Varsayılan Port: `25565`)\n"
                f"• **Minecraft Botu:** `KolicGambleBot`\n"
                f"• **Bot Canlı Durumu:** `<#1537587704261386350>` (bot-durumu) kanalından botun sunucuya bağlı olup olmadığını 7/24 görebilirsin.\n\n"
                f"Bot oyundan düşse bile güvenlik sistemi 15 saniye içinde botu otomatik olarak oyuna geri sokar."
            )

        # 7. INTENT: HESAP DEĞİŞTİRME / YANLIŞ HESAP
        relink_keywords = ["isim degis", "hesap degis", "yanlis isim", "baska hesap", "yanlis bagladim", "sifirla"]
        if any(k in norm for k in relink_keywords):
            return (
                f"Selam {user.mention}! Güvenlik amacıyla ve hesap çalınmalarını önlemek için bağlı Minecraft hesabını değiştirmek yetkili onayına tabidir.\n\n"
                f"Hesabını değiştirmek veya sıfırlamak istiyorsan lütfen yukarıdaki **`👤 Yetkili Çağır`** butonuna bas, yetkili arkadaşlarımız eski bağını kaldırıp yeni adını tanımlasınlar."
            )

        # 8. INTENT: TEŞEKKÜR / MEMNUNİYET
        thanks_keywords = ["tesekkur", "eyvallah", "sagol", "tamamdir", "anladim", "eyw", "tamam", "ok", "tmm", "adamsin", "kral", "helal", "harika"]
        if any(k in norm for k in thanks_keywords):
            return (
                f"Rica ederim {user.mention}, ne demek! Her zaman buradayım. Başka aklına takılan bir şey olursa çekinmeden sorabilirsin.\n"
                f"İşin bittiğinde yukarıdaki **`🔒 Talebi Kapat`** butonuna basarak bu odayı güvenle kapatabilirsin. Keyifli oyunlar dilerim! ❤️"
            )

        # 9. DEFAULT / CONTEXTUAL FALLBACK
        return (
            f"Anladım {user.mention}. Sana en iyi şekilde yardımcı olmak istiyorum.\n\n"
            f"Bana şunlardan biriyle ilgili soru sorabilirsin:\n"
            f"• **Para Yatırma:** *'Nasıl bakiye yüklerim?'*\n"
            f"• **Para Çekme:** *'Paramı nasıl çekerim?'*\n"
            f"• **İşlem Durumu:** *'Param yattı mı / gecikti mi?'*\n"
            f"• **Hesap Eşleştirme:** *'Minecraft hesabımı nasıl bağlarım?'*\n"
            f"• **Oyunlar:** *'Hangi oyunlar var, nasıl oynanır?'*\n\n"
            f"Eğer özel bir sorunun varsa detay yazabilir veya **`👤 Yetkili Çağır`** butonuna basarak doğrudan insan bir yetkiliyle görüşebilirsin!"
        )


async def setup(bot):
    await bot.add_cog(TicketsCog(bot))
