import discord, discord_slash, wolframalpha, requests, os
from PIL import Image, ImageDraw, ImageFont

class NerdShit():
    def __init__(self, bot):
        """Runs misc commands."""
        self.bot = bot

    async def wolfSearch(self,ctx,content):
        await self.bot.defer(ctx)
        fnt = ImageFont.truetype('gwendolyn/resources/fonts/times-new-roman.ttf', 20)
        self.bot.log("Requesting data")
        bot = wolframalpha.Client(self.bot.credentials["wolfram_alpha_key"])
        res = bot.query(content)

        self.bot.log("Processing data")
        titles = []
        pods = []
        if int(res.numpods) > 0:
            for pod in res.pods:
                titles += [pod.title]
                for x, sub in enumerate(pod.subpods):
                    pods += [sub]
                    if x > 0:
                        titles += [""]

            podChunks = [pods[x:x+2] for x in range(0, len(pods), 2)]
            titleChucks = [titles[x:x+2] for x in range(0, len(titles), 2)]
            await ctx.send(f"Response for \"{content}\"")

            for x, chunk in enumerate(podChunks):
                width = 0
                for title in titleChucks[x]:
                    width = max(width,fnt.getsize(title)[0])
                height = 5
                heights = []
                for count, pod in enumerate(chunk):
                    heights += [height]
                    width = max(width,int(pod.img['@width']))
                    if titleChucks[x][count] == "":
                        placeForText = 0
                    else:
                        placeForText = 30
                    height += int(pod.img["@height"]) + 10 + placeForText

                width += 10
                height += 5
                wolfImage = Image.new("RGB",(width,height),color=(255,255,255))

                for count, pod in enumerate(chunk):
                    response = requests.get(pod.img["@src"])
                    file = open("gwendolyn/resources/wolfTemp.png", "wb")
                    file.write(response.content)
                    file.close()
                    old_image = Image.open("gwendolyn/resources/wolfTemp.png")
                    oldSize = old_image.size
                    if titleChucks[x][count] == "":
                        placeForText = 0
                    else:
                        placeForText = 30
                    newSize = (width,int(oldSize[1]+10+placeForText))
                    newImage = Image.new("RGB",newSize,color=(255,255,255))
                    newImage.paste(old_image, (int((int(oldSize[0]+10)-oldSize[0])/2),int(((newSize[1]-placeForText)-oldSize[1])/2)+placeForText))
                    if titleChucks[x][count] != "":
                        d = ImageDraw.Draw(newImage,"RGB")
                        d.text((5,7),titleChucks[x][count],font=fnt,fill=(150,150,150))

                    wolfImage.paste(newImage,(0,heights[count]))
                    newImage.close()
                    old_image.close()
                    count += 1

                wolfImage.save("gwendolyn/resources/wolf.png")
                wolfImage.close()
                await ctx.channel.send(file = discord.File("gwendolyn/resources/wolf.png"))

                os.remove("gwendolyn/resources/wolf.png")
                os.remove("gwendolyn/resources/wolfTemp.png")
        else:
            self.bot.log("No returned data")
            await ctx.send("Could not find anything relating to your search")