"""
Advanced Keyboard Builder with Premium Buttons
"""
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from config.settings import (
    BUTTON_EMOJI_ID,
    BUTTON_STYLE_PRIMARY,
    BUTTON_STYLE_SUCCESS,
    BUTTON_STYLE_DANGER
)


class AdvancedKeyboard:
    """Build advanced keyboards with colored buttons and emojis"""

    @staticmethod
    def exact_colored_payload_sample() -> list:
        """Return the exact payload structure requested by user."""
        return [
            [
                {
                    'text': 'a',
                    'callback_data': 'Sourrce_kade',
                    'icon_custom_emoji_id': '5820916017458583465',
                    'style': 'success'
                }
            ],
            [
                {
                    'text': 'b',
                    'callback_data': 'Sourrce_kade',
                    'icon_custom_emoji_id': '5820916017458583465',
                    'style': 'danger'
                }
            ],
            [
                {
                    'text': 'c',
                    'callback_data': 'Sourrce_kade',
                    'icon_custom_emoji_id': '5820916017458583465',
                    'style': 'primary'
                }
            ],
        ]

    @staticmethod
    def build_raw_payload(buttons: list) -> dict:
        """Build raw reply_markup payload including custom style fields."""
        return {'inline_keyboard': buttons}

    @staticmethod
    def main_menu_payload() -> dict:
        """Raw colored payload for main menu."""
        buttons = [
            [
                {
                    'text': '🛍️ فروشگاه',
                    'callback_data': 'shop',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_SUCCESS,
                },
                {
                    'text': '🎁 رایگان',
                    'callback_data': 'free_menu',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                },
            ],
            [
                {
                    'text': '💰 کیف پول',
                    'callback_data': 'wallet',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                },
                {
                    'text': '👥 زیرمجموعه',
                    'callback_data': 'referral',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                },
            ],
            [
                {
                    'text': '⚙️ تنظیمات',
                    'callback_data': 'settings',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                },
                {
                    'text': '📊 آمار',
                    'callback_data': 'stats',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                },
            ],
        ]
        return AdvancedKeyboard.build_raw_payload(buttons)

    @staticmethod
    def shop_menu_payload() -> dict:
        """Raw colored payload for shop menu."""
        buttons = [
            [
                {
                    'text': '💳 خریداری پلن',
                    'callback_data': 'buy_plan',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_SUCCESS,
                }
            ],
            [
                {
                    'text': '🪙 تبدیل سکه',
                    'callback_data': 'redeem_coins',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                }
            ],
            [
                {
                    'text': '🔙 بازگشت',
                    'callback_data': 'back_main',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_DANGER,
                }
            ],
        ]
        return AdvancedKeyboard.build_raw_payload(buttons)

    @staticmethod
    def admin_panel_payload() -> dict:
        """Raw colored payload for admin panel."""
        buttons = [
            [
                {
                    'text': '📊 آمار ربات',
                    'callback_data': 'admin_stats',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                }
            ],
            [
                {
                    'text': '🛍️ مدیریت پلن‌ها',
                    'callback_data': 'admin_plans',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                }
            ],
            [
                {
                    'text': '📦 مدیریت سفارشات',
                    'callback_data': 'admin_orders',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_SUCCESS,
                }
            ],
            [
                {
                    'text': '👥 مدیریت کاربران',
                    'callback_data': 'admin_users',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                }
            ],
            [
                {
                    'text': '📢 پیام همگانی',
                    'callback_data': 'admin_broadcast',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                }
            ],
            [
                {
                    'text': '🎨 ویرایش متن/دکمه',
                    'callback_data': 'admin_ui',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_SUCCESS,
                }
            ],
            [
                {
                    'text': '📌 جوین اجباری',
                    'callback_data': 'admin_force_join',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                }
            ],
            [
                {
                    'text': '✉️ پیام به آیدی',
                    'callback_data': 'admin_dm',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                }
            ],
            [
                {
                    'text': '💳 شارژ دستی',
                    'callback_data': 'admin_charge',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY,
                }
            ],
            [
                {
                    'text': '🔙 بازگشت',
                    'callback_data': 'back_main',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_DANGER,
                }
            ],
        ]
        return AdvancedKeyboard.build_raw_payload(buttons)

    @staticmethod
    def referral_free_server_payload(referrals_count: int, threshold: int) -> dict:
        """Create colored referral keyboard for free server claim."""
        can_claim = referrals_count >= threshold
        remaining = max(threshold - referrals_count, 0)

        claim_text = 'دریافت سرور رایگان' if can_claim else f'نیاز به {remaining} دعوت دیگر'
        claim_style = BUTTON_STYLE_SUCCESS if can_claim else BUTTON_STYLE_DANGER

        payload = [
            [
                {
                    'text': claim_text,
                    'callback_data': 'claim_free_server',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': claim_style
                }
            ],
            [
                {
                    'text': 'بازگشت',
                    'callback_data': 'back_main',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_DANGER
                }
            ],
        ]
        return AdvancedKeyboard.build_raw_payload(payload)
    
    @staticmethod
    def create_button(text: str, callback_data: str, 
                     style: str = BUTTON_STYLE_PRIMARY,
                     emoji_id: str = BUTTON_EMOJI_ID) -> InlineKeyboardButton:
        """Create advanced button with style and emoji"""
        button = InlineKeyboardButton(
            text=text,
            callback_data=callback_data,
            icon_custom_emoji_id=str(emoji_id)
        )
        # style is not a standard InlineKeyboardButton field in aiogram.
        # It is used in raw payload mode only.
        return button
    
    @staticmethod
    def build_keyboard(buttons: list) -> InlineKeyboardMarkup:
        """
        Build keyboard from buttons list
        buttons format: [[{'text': 'Button', 'callback_data': 'data', 'emoji_id': 123, 'style': 'primary'}]]
        """
        keyboard = []
        for row in buttons:
            keyboard_row = []
            for btn_data in row:
                btn = AdvancedKeyboard.create_button(
                    text=btn_data.get('text', ''),
                    callback_data=btn_data.get('callback_data', ''),
                    style=btn_data.get('style', BUTTON_STYLE_PRIMARY),
                    emoji_id=btn_data.get('emoji_id', BUTTON_EMOJI_ID)
                )
                keyboard_row.append(btn)
            keyboard.append(keyboard_row)
        return InlineKeyboardMarkup(inline_keyboard=keyboard)
    
    @staticmethod
    def main_menu() -> InlineKeyboardMarkup:
        """Main menu keyboard"""
        buttons = [
            [
                {'text': '🛍️ فروشگاه', 'callback_data': 'shop', 'style': 'success'},
                {'text': '🎁 رایگان', 'callback_data': 'free_menu', 'style': 'primary'},
            ],
            [
                {'text': '💰 کیف پول', 'callback_data': 'wallet', 'style': 'primary'},
                {'text': '👥 زیرمجموعه', 'callback_data': 'referral', 'style': 'primary'},
            ],
            [
                {'text': '⚙️ تنظیمات', 'callback_data': 'settings', 'style': 'primary'},
                {'text': '📊 آمار', 'callback_data': 'stats', 'style': 'primary'},
            ]
        ]
        return AdvancedKeyboard.build_keyboard(buttons)
    
    @staticmethod
    def shop_menu() -> InlineKeyboardMarkup:
        """Shop menu keyboard"""
        buttons = [
            [
                {'text': '💳 خریداری پلن', 'callback_data': 'buy_plan', 'style': 'success'},
            ],
            [
                {'text': '🪙 تبدیل سکه', 'callback_data': 'redeem_coins', 'style': 'primary'},
            ],
            [
                {'text': '🔙 بازگشت', 'callback_data': 'back_main', 'style': 'danger'},
            ]
        ]
        return AdvancedKeyboard.build_keyboard(buttons)
    
    @staticmethod
    def payment_method() -> InlineKeyboardMarkup:
        """Payment method selection keyboard"""
        buttons = [
            [
                {'text': '💵 تومان (درگاه)', 'callback_data': 'pay_toman', 'style': 'success'},
            ],
            [
                {'text': '₮ تتر (USDT)', 'callback_data': 'pay_usdt', 'style': 'primary'},
                {'text': '◆ ترون (TRX)', 'callback_data': 'pay_trx', 'style': 'primary'},
            ],
            [
                {'text': '🔙 بازگشت', 'callback_data': 'back_shop', 'style': 'danger'},
            ]
        ]
        return AdvancedKeyboard.build_keyboard(buttons)
    
    @staticmethod
    def admin_panel() -> InlineKeyboardMarkup:
        """Admin panel keyboard"""
        buttons = [
            [
                {'text': '📊 آمار ربات', 'callback_data': 'admin_stats', 'style': 'primary'},
            ],
            [
                {'text': '🛍️ مدیریت پلن‌ها', 'callback_data': 'admin_plans', 'style': 'primary'},
            ],
            [
                {'text': '👥 مدیریت کاربران', 'callback_data': 'admin_users', 'style': 'primary'},
            ],
            [
                {'text': '📢 پیام همگانی', 'callback_data': 'admin_broadcast', 'style': 'primary'},
            ],
            [
                {'text': '🎨 ویرایش متن/دکمه', 'callback_data': 'admin_ui', 'style': 'success'},
            ],
            [
                {'text': '💳 شارژ دستی', 'callback_data': 'admin_charge', 'style': 'primary'},
            ],
            [
                {'text': '🔙 بازگشت', 'callback_data': 'back_main', 'style': 'danger'},
            ]
        ]
        return AdvancedKeyboard.build_keyboard(buttons)
    
    @staticmethod
    def confirm_keyboard() -> InlineKeyboardMarkup:
        """Confirmation keyboard"""
        buttons = [
            [
                {'text': '✅ تایید', 'callback_data': 'confirm', 'style': 'success'},
                {'text': '❌ انصراف', 'callback_data': 'cancel', 'style': 'danger'},
            ]
        ]
        return AdvancedKeyboard.build_keyboard(buttons)
    
    @staticmethod
    def yes_no_keyboard() -> InlineKeyboardMarkup:
        """Yes/No keyboard"""
        buttons = [
            [
                {'text': 'بله', 'callback_data': 'yes', 'style': 'success'},
                {'text': 'خیر', 'callback_data': 'no', 'style': 'danger'},
            ]
        ]
        return AdvancedKeyboard.build_keyboard(buttons)

    @staticmethod
    def free_rewards_payload(can_claim: bool) -> dict:
        """Colored buttons for free rewards menu."""
        claim_style = BUTTON_STYLE_SUCCESS if can_claim else BUTTON_STYLE_DANGER
        payload = [
            [
                {
                    'text': '🧩 دریافت کانفیگ رایگان',
                    'callback_data': 'claim_free_config_by_points',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': claim_style
                }
            ],
            [
                {
                    'text': '🪙 دریافت سکه رایگان',
                    'callback_data': 'claim_free_coins_by_points',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': claim_style
                }
            ],
            [
                {
                    'text': '🔙 بازگشت',
                    'callback_data': 'back_main',
                    'icon_custom_emoji_id': BUTTON_EMOJI_ID,
                    'style': BUTTON_STYLE_PRIMARY
                }
            ],
        ]
        return AdvancedKeyboard.build_raw_payload(payload)
