from Powers import LOGGER
from Powers.bot_class import Gojo
from pyrogram import enums, filters
from Powers.utils.kbhelpers import ikb
from Powers.utils.custom_filters import command
from pyrogram.types import Message, CallbackQuery
async def gen_formatting_kb(m):
    return ikb(
        [
            [
                ("Markdown Formatting", "formatting.md_formatting"),
                ("Fillings", "formatting.fillings"),
            ],
            [("Random Content", "formatting.random_content")],
            [("« " + "Back", "commands")],
        ],
    )
@Gojo.on_message(
    command(["markdownhelp", "formatting"]) & filters.private,
)
async def markdownhelp(_, m: Message):
    await m.reply_text(
        text=f"plugins.{__PLUGIN__}.help",
        quote=True,
        reply_markup=(await gen_formatting_kb(m)),
    )
    LOGGER.info(f"{m.from_user.id} used cmd '{m.command}' in {m.chat.id}")
    return
@Gojo.on_callback_query(filters.regex("^formatting."))
async def get_formatting_info(_, q: CallbackQuery):
    cmd = q.data.split(".")[1]
    kb = ikb([[("Back", "back.formatting")]])
    if cmd == "md_formatting":
        await q.message.edit_text(
            text="""Markdown Formatting
      You can format your message using bold, italic, underline, strike and much more. Go ahead and experiment!
      **Note**: It supports telegram user based formatting as well as html and markdown formattings.
      Supported markdown:
      - `code words`: Backticks are used for monospace fonts. Shows as: code words.
      - __italic__: Underscores are used for italic fonts. Shows as: italic words.
      - **bold**: Asterisks are used for bold fonts. Shows as: bold words.
      - ```pre```: To make the formatter ignore other formatting characters inside the text formatted with '```', like: **bold** | *bold*.
      - --underline--: To make text underline.
      - ~~strike~~: Tildes are used for strikethrough. Shows as: strike.
      - ||spoiler||: Double vertical bars are used for spoilers. Shows as: Spoiler.
      - [hyperlink](example.com): This is the formatting used for hyperlinks. Shows as: hyperlink.
      - [My Button](buttonurl://example.com): This is the formatting used for creating buttons. This example will create a button named "My button" which opens example.com when clicked.
      If you would like to send buttons on the same row, use the :same formatting.
      Example:
      [button 1](buttonurl:example.com)
      [button 2](buttonurl://example.com:same)
      [button 3](buttonurl://example.com)
      This will show button 1 and 2 on the same line, while 3 will be underneath.""",
            reply_markup=kb,
            parse_mode=enums.ParseMode.HTML,
        )
    elif cmd == "fillings":
        await q.message.edit_text(
            text="""Fillings
      You can also customise the contents of your message with contextual data. For example, you could mention a user by name in the welcome message, or mention them in a filter!
      You can use these to mention a user in notes too!
      Supported fillings:
      - {first}: The user's first name.
      - {last}: The user's last name.
      - {fullname}: The user's full name.
      - {username}: The user's username. If they don't have one, mentions the user instead.
      - {mention}: Mentions the user with their firstname.
      - {id}: The user's ID.
      - {chatname}: The chat's name.""",
            reply_markup=kb,
            parse_mode=enums.ParseMode.HTML,
        )
    elif cmd == "random_content":
        await q.message.edit_text(
            text="""Random Content
      Another thing that can be fun, is to randomise the contents of a message. Make things a little more personal by changing welcome messages, or changing notes!
      How to use random contents:
      - %%%: This separator can be used to add "random" replies to the bot.
      For example:
      hello
      %%%
      how are you
      This will randomly choose between sending the first message, "hello", or the second message, "how are you".
      Use this to make Gojo feel a bit more customised! (only works in filters/notes)
      Example welcome message::
      - Every time a new user joins, they'll be presented with one of the three messages shown here.
      -> /filter "hey"
      hello there {first}!
      %%%
      Ooooh, {first} how are you?
      %%%
      Sup? {first}""",
            reply_markup=kb,
            parse_mode=enums.ParseMode.HTML,
        )
    await q.answer()
    return
@Gojo.on_callback_query(filters.regex("^back."))
async def send_mod_help(_, q: CallbackQuery):
    await q.message.edit_text(
        text="""Formatting
        Gojo supports a large number of formatting options to make your messages more expressive. Take a look by clicking the buttons below!""",
        reply_markup=(await gen_formatting_kb(q.message)),
    )
    await q.answer()
    return
__PLUGIN__ = "formatting"
__alt_name__ = ["formatting", "markdownhelp", "markdown"]
__buttons__ = [
    [
        ("Markdown Formatting", "formatting.md_formatting"),
        ("Fillings", "formatting.fillings"),
    ],
    [("Random Content", "formatting.random_content")],
]
__HELP__ = """
**Formatting**
Gojo supports a large number of formatting options to make your messages more expressive. Take a look by clicking the buttons below!"""