import logging

import discord
from discord.ext import commands

from tuxbot.core import checks
from tuxbot.core.bot import Tux
from tuxbot.core.i18n import Translator, set_locale, _locale_key_value
from tuxbot.core.utils.functions.extra import group_extra, ContextPlus

log = logging.getLogger("tuxbot.cogs.admin")
_ = Translator("Admin", __file__)


class Admin(commands.Cog, name="Admin"):
    def __init__(self, bot: Tux):
        self.bot = bot

    @group_extra(
        name="lang",
        aliases=["locale", "langue"],
        deletable=True
    )
    @commands.guild_only()
    @checks.is_admin()
    async def _lang(self, ctx: ContextPlus):
        """Manage lang settings."""

    @_lang.command(name="set", aliases=["define", "choice"])
    async def _lang_set(self, ctx: ContextPlus, lang: str):
        try:
            set_locale(lang.lower())
            await ctx.send(
                _("Locale changed to {lang} successfully")
                    .format(lang=f"`{lang}`")
            )
        except NotImplementedError:
            await ctx.send(_("This locale isn't available, execute `lang list` to view available locales"))

    @_lang.command(name="list", aliases=["liste", "all", "view"])
    async def _lang_list(self, ctx: ContextPlus):
        e = discord.Embed(
            title=_("List of available locales: "),
            description='\n'.join([i[0] for i in _locale_key_value.values()]),
            color=0x36393E
        )

        await ctx.send(embed=e)