import discord
from discord.ext import commands
from decorators import help
from enums.help_categories import Category
from functions.scraping import google_search


class Google(commands.Cog):
    def __init__(self, client):
        self.client = client

    # Don't allow any commands to work when locked
    def cog_check(self, ctx):
        return not self.client.locked

    @commands.command(name="Google", aliases=["Gtfm", "Search"], usage="[Query]", case_insensitive=True)
    @help.Category(Category.Other)
    async def google(self, ctx, *query):
        if not query:
            return await ctx.reply("Je hebt geen query opgegeven.", mention_author=True)

        results, status = google_search(" ".join(query))

        if results is None:
            return await ctx.send("Er ging iets fout (Response {})".format(status))

        # Filter out all Nones
        elements = list(filter(lambda x: x is not None, results))

        embed = discord.Embed(colour=discord.Colour.blue())
        embed.set_author(name="Google Search")

        # Empty list of results
        if len(elements) == 0:
            embed.description = "Geen resultaten gevonden."
            return await ctx.reply(embed=embed, mention_author=False)

        # Cut excess results out
        if len(elements) > 10:
            elements = elements[:10]

        links = []

        for index, (link, title) in enumerate(elements):
            links.append("{}: [{}]({})".format(index + 1, title, link))

        embed.description = "\n".join(links)

        await ctx.reply(embed=embed, mention_author=False)


def setup(client):
    client.add_cog(Google(client))
