import logging
from os import path, makedirs, rename, remove

from disnake.ext import commands

import lib


class Audio(commands.Cog):
    def __init__(self, bot):
        self.bot = bot  # defining bot as global var in class

    @commands.Cog.listener()  # this is a decorator for events/listeners
    async def on_ready(self):
        logging.info(f'Cog {__name__.split(".")[1]} is ready!.')

    @commands.command(name="upload_audio")
    async def upload_audio(self, ctx, user=None):
        user = user or ctx.author
        if ctx.author.guild_permissions.administrator or user is ctx.author:
            if ctx.message.attachments:
                from os import error
                if not path.isdir(f'tmp/{user.id}'):
                    try:
                        makedirs(f'tmp/{user.id}')
                    except error as _error:
                        logging.info(f"Failed to create dir", _error)
                if not path.isdir(f'audio/{user.id}'):
                    try:
                        makedirs(f'audio/{user.id}')
                    except error as _error:
                        logging.info(f"Failed to create dir", _error)
                for at in ctx.message.attachments:
                    import mimetypes

                    await at.save(f'tmp/{user.id}/{at.filename}')
                    guess = mimetypes.guess_type(f'tmp/{user.id}/{at.filename}')
                    await ctx.reply(f'it`s {guess}')
                    if guess[0].split('/')[0] == 'audio':
                        from pymediainfo import MediaInfo
                        file = f'tmp/{user.id}/{at.filename}'
                        duration = round(MediaInfo.parse(file).tracks[0].duration / 1000)
                        if duration > 15:
                            await ctx.reply(f'Audio duration is {duration}, but max is 15')
                            remove(f'tmp/{user.id}/{at.filename}')
                        else:
                            a = lib.DB.read_db(ctx.guild.id, user.id)
                            if a is None:
                                audiolist = f'{user.id}/{at.filename}'
                            else:
                                audiolist = lib.DB.read_db(ctx.guild.id, user.id) + ", " + f'{user.id}/{at.filename}'

                            lib.DB.add_audio(ctx.guild.id, user.id, audiolist)
                            rename(f'tmp/{user.id}/{at.filename}', f'audio/{user.id}/{at.filename}')
                    elif guess[0].split('/')[0] != 'audio':
                        await ctx.reply(f'It not audio {at.filename}\n it`s {guess[0]}')
                        remove(f'tmp/{user.id}/{at.filename}')
            else:
                await ctx.reply("Has no Attachment")
        else:
            await ctx.reply(f'You`re not admin. You can add audio only for your own account')


def setup(bot):  # an extension must have a setup function
    bot.add_cog(Audio(bot))  # adding a cog
