from aiogram import Router from aiogram.fsm.context import FSMContext from aiogram.types import Message, CallbackQuery, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder from babel.support import LazyProxy from logging import getLogger from ....model.descriptors import EntityFieldDescriptor, EntityDescriptor from ..context import ContextData, CallbackCommand from ..common import get_send_message from .common import wrap_editor logger = getLogger(__name__) router = Router() async def bool_editor(message: Message | CallbackQuery, edit_prompt: str, entity_descriptor: EntityDescriptor, field_descriptor: EntityFieldDescriptor, callback_data: ContextData, **kwargs): keyboard_builder = InlineKeyboardBuilder() if isinstance(field_descriptor.bool_true_value_btn, LazyProxy): true_caption = field_descriptor.bool_true_value_btn.value else: true_caption = field_descriptor.bool_true_value_btn if isinstance(field_descriptor.bool_false_value_btn, LazyProxy): false_caption = field_descriptor.bool_false_value_btn.value else: false_caption = field_descriptor.bool_false_value_btn keyboard_builder.row( InlineKeyboardButton(text = true_caption, callback_data = ContextData( command = CallbackCommand.FIELD_EDITOR_CALLBACK, context = callback_data.context, entity_name = callback_data.entity_name, entity_id = callback_data.entity_id, field_name = callback_data.field_name, data = str(True), save_state = True).pack()), InlineKeyboardButton(text = false_caption, callback_data = ContextData( command = CallbackCommand.FIELD_EDITOR_CALLBACK, context = callback_data.context, entity_name = callback_data.entity_name, entity_id = callback_data.entity_id, field_name = callback_data.field_name, data = str(False), save_state = True).pack()) ) await wrap_editor(keyboard_builder = keyboard_builder, field_descriptor = field_descriptor, entity_descriptor = entity_descriptor, callback_data = callback_data, state = kwargs["state"]) send_message = get_send_message(message) await send_message(text = edit_prompt, reply_markup = keyboard_builder.as_markup())