import discord, wolframalpha, requests, os
from PIL import Image, ImageDraw, ImageFont
from funcs import logThis

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

    async def wolfSearch(self,ctx,content):
        fnt = ImageFont.truetype('resources/times-new-roman.ttf', 20)
        async with ctx.message.channel.typing():
            logThis("Requesting data")
            client = wolframalpha.Client(self.client.credentials.wolfKey)
            res = client.query(content)

            logThis("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)]

                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(list(pod.img)[0]["@width"]))
                        if titleChucks[x][count] == "":
                            placeForText = 0
                        else:
                            placeForText = 30
                        height += int(list(pod.img)[0]["@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(list(pod.img)[0]["@src"])
                        file = open("resources/wolfTemp.png", "wb")
                        file.write(response.content)
                        file.close()
                        oldImage = Image.open("resources/wolfTemp.png")
                        oldSize = oldImage.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(oldImage, (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()
                        oldImage.close()
                        count += 1

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

                    os.remove("resources/wolf.png")
                    os.remove("resources/wolfTemp.png")
            else:
                logThis("No returned data")
                await ctx.message.channel.send("Could not find anything relating to your search")