from telegram import Update
from telegram.ext import ContextTypes
from telegram import InlineKeyboardButton, InlineKeyboardMarkup

from services.admin_service import (
    add_admin,
    remove_admin,
    get_admins
)

from services.auth_service import is_owner


async def tambah_admin(
    update: Update,
    context: ContextTypes.DEFAULT_TYPE
):
    if not is_owner(update.effective_user.id):
        return

    if len(context.args) < 2:
        await update.message.reply_text(
            "Gunakan:\n/tambahadmin USER_ID NAMA_ADMIN"
        )
        return

    try:
        user_id = int(context.args[0])
        nama_admin = " ".join(context.args[1:])

    except ValueError:
        await update.message.reply_text(
            "ID harus angka."
        )
        return

    if add_admin(user_id,nama_admin):
        await update.message.reply_text(
            f"✅ Admin {user_id} berhasil ditambahkan.",
            reply_markup=InlineKeyboardMarkup([
                [
                    InlineKeyboardButton(
                        "⬅️ Kembali",
                        callback_data="owner_adminmenu"
                    )
                ]
            ])
        )
    else:
        await update.message.reply_text(
            "⚠️ User sudah menjadi admin.",
            reply_markup=InlineKeyboardMarkup([
                [
                    InlineKeyboardButton(
                        "⬅️ Kembali",
                        callback_data="owner_adminmenu"
                    )
                ]
            ])
        )


async def hapus_admin_bot(
    update: Update,
    context: ContextTypes.DEFAULT_TYPE
):
    if not is_owner(update.effective_user.id):
        return

    if not context.args:
        await update.message.reply_text(
            "Gunakan:\n/hapusadmin USER_ID"
        )
        return

    try:
        user_id = int(context.args[0])

    except ValueError:
        await update.message.reply_text(
            "ID harus angka.",
            reply_markup=InlineKeyboardMarkup([
                [
                    InlineKeyboardButton(
                        "⬅️ Kembali",
                        callback_data="owner_adminmenu"
                    )
                ]
            ])
        )
        return

    if remove_admin(user_id):
        await update.message.reply_text(
            f"🗑️ Admin {user_id} berhasil dihapus.",
            reply_markup=InlineKeyboardMarkup([
                [
                    InlineKeyboardButton(
                        "⬅️ Kembali",
                        callback_data="owner_adminmenu"
                    )
                ]
            ])
        )
    else:
        await update.message.reply_text(
            "⚠️ Admin tidak ditemukan.",
            reply_markup=InlineKeyboardMarkup([
                [
                    InlineKeyboardButton(
                        "⬅️ Kembali",
                        callback_data="owner_adminmenu"
                    )
                ]
            ])
        )


async def list_admin(
    update: Update,
    context: ContextTypes.DEFAULT_TYPE
):
    if not is_owner(update.effective_user.id):
        return

    admins = get_admins()

    if not admins:
        await update.message.reply_text(
            "⚠️ Belum ada admin."
        )
        return

    teks = "👮 <b>DAFTAR ADMIN</b>\n\n"

    for admin in admins:

        try:
            await context.bot.get_chat(admin["id"])
            status = "🟢"
        except:
            status = "🔴"

        teks += (
            f"• <code>{admin['id']}</code> - "
            f"{admin['nama']} {status}\n"
        )

    await update.message.reply_text(
        teks,
        parse_mode="HTML"
    )