from discord.ext import commands
import asyncio
import discord
import urllib.request
import json
import random
import requests


class Funs:
	"""Commandes funs."""

	def __init__(self, bot):
		self.bot = bot

	"""--------------------------------------------------------------------------------------------------------------------------"""

	@commands.command()
	async def avatar(self, ctx, user: discord.Member = None):
		"""Récuperer l'avatar de ..."""

		if user == None:
			user = ctx.message.author

		embed = discord.Embed(title="Avatar de : " + user.name,
							  url=user.avatar_url_as(format="png"),
							  description=f"[Voir en plus grand]({user.avatar_url_as(format='png')})")
		embed.set_thumbnail(url=user.user.avatar_url_as(format="png"))
		await ctx.send(embed=embed)

	"""--------------------------------------------------------------------------------------------------------------------------"""

	@commands.command(pass_context=True)
	async def poke(self, ctx, user: discord.Member):
		"""Poke quelqu'un"""
		await ctx.send(":clap: Hey {0} tu t'es fait poker par {1} !".format(
			user.mention, ctx.message.author.name))
		await ctx.message.delete()

	"""--------------------------------------------------------------------------------------------------------------------------"""
	
	@commands.command()
	async def btcprice(self, ctx):
		"""Le prix du BTC"""
		loading = await ctx.send("_réfléchis..._")
		try:
			url = urllib.request.urlopen("https://blockchain.info/fr/ticker")
			btc = json.loads(url.read().decode())
		except KeyError:
			btc = 1

		if btc == 1:
			await loading.edit(content="Impossible d'accèder à l'API blockchain.info, "
						   "veuillez réessayer ultérieurment ! :c")
		else:
			frbtc = str(btc["EUR"]["last"]).replace(".", ",")
			usbtc = str(btc["USD"]["last"]).replace(".", ",")
			await loading.edit(content="Un bitcoin est égal à : {0}$US soit {1}€.".format(usbtc, frbtc))

	"""--------------------------------------------------------------------------------------------------------------------------"""

	@commands.command()
	async def joke(self, ctx, number:str = 0):
		"""Print a random joke in a json file"""
		with open('texts/jokes.json') as js:
			jk = json.load(js)

		try:
			if int(number) <= 15 and int(number) > 0:
				clef = str(number)
			else:
				clef = str(random.randint(1,15))
		except:
			clef = str(random.randint(1,15))


		joke = jk["{}".format(clef)]

		embed = discord.Embed(title="Blague _{}_ : ".format(clef), description=joke['content'], colour=0x03C9A9)
		embed.set_footer(text="Par " + joke['author'])
		embed.set_thumbnail(url='https://outout.tech/tuxbot/blobjoy.png')
		await ctx.send(embed=embed)

	"""--------------------------------------------------------------------------------------------------------------------------"""

	@commands.command()
	async def ethylotest(self, ctx):
		"""Ethylotest simulator 2018"""
		results_poulet = ["Désolé mais mon ethylotest est sous Windows Vista, "
						  "merci de patienter...",
						  "_(ethylotest)_ : Une erreur est survenue. Windows "
						  "cherche une solution à se problème.",
						  "Mais j'l'ai foutu où ce p\\*\\*\\* d'ethylotest de m\\*\\*\\* "
						  "bordel fait ch\\*\\*\\*",
						  "C'est pas possible z'avez cassé l'ethylotest !"]
		results_client = ["D'accord, il n'y a pas de problème à cela je suis "
						  "complètement clean",
						  "Bien sur si c'est votre devoir !", "Suce bi\\*e !",
						  "J'ai l'air d'être bourré ?",
						  "_laissez moi prendre un bonbon à la menthe..._"]

		result_p = random.choice(results_poulet)
		result_c = random.choice(results_client)

		await ctx.send(":oncoming_police_car: Bonjour bonjour, contrôle "
					   "d'alcoolémie !")
		await asyncio.sleep(0.5)
		await ctx.send(":man: " + result_c)
		await asyncio.sleep(1)
		await ctx.send(":police_car: " + result_p)

	"""--------------------------------------------------------------------------------------------------------------------------"""

	@commands.command()
	async def coin(self, ctx):
		"""Coin flip simulator 2025"""
		starts_msg = ["Je lance la pièce !", "C'est parti !", "C'est une pièce"
															  " d'un cent faut"
															  " pas la perdre",
					  "C'est une pièce d'un euro faut pas la perdre",
					  "Je lance !"]
		results_coin = ["{0} pile", "{0} face", "{1} Heu c'est quoi pile c'est"
												" quoi face enfaite ?",
						"{1} Oh shit, je crois que je l'ai perdue",
						"{1} Et bim je te vol ta pièce !",
						"{0} Oh une erreur d'impression il n'y a ni pile ni"
						" face !"]

		start = random.choice(starts_msg)
		result = random.choice(results_coin)

		await ctx.send(start)
		await asyncio.sleep(0.6)
		await ctx.send(result.format(":moneybag: Et la pièce retombe sur ...",
									 ":robot:"))

	"""--------------------------------------------------------------------------------------------------------------------------"""

	@commands.command()
	async def pokemon(self, ctx):
		"""Random pokemon fight"""
		with open('texts/pokemons.json') as js:
			jk = json.load(js)

		poke1 = jk[random.randint(1, 150)]
		poke2 = jk[random.randint(1, 150)]

		try:
			if poke1['MaxHP'] > poke2['MaxHP']:
				winer = poke1
			else:
				winer = poke2
		except KeyError:
			winer = poke1

		await ctx.send(":flag_white: **Le combat commence !**")
		await asyncio.sleep(1)
		await ctx.send(":loudspeaker: Les concurants sont {} contre {} ! Bonne"
					   " chance à eux !".format(poke1["Name"], poke2["Name"]))
		await asyncio.sleep(0.5)
		await ctx.send(":boom: {} commence et utilise {}".format(
			poke1["Name"], poke1["Fast Attack(s)"][0]["Name"]))
		await asyncio.sleep(1)
		await ctx.send(":dash: {} réplique avec {}".format(
			poke2["Name"], poke2["Fast Attack(s)"][0]["Name"]))
		await asyncio.sleep(1.2)
		await ctx.send("_le combat continue de se dérouler..._")
		await asyncio.sleep(1.5)
		await ctx.send(":trophy: Le gagnant est **{}** !".format(
			winer["Name"]))

	"""--------------------------------------------------------------------------------------------------------------------------"""

	@commands.command()
	async def randomcat(self, ctx):
		"""Display a random cat"""
		r = requests.get('http://aws.random.cat/meow')
		cat = str(r.json()['file'])
		embed = discord.Embed(title="Meow",
							  description="[Voir le chat plus grand]({})".
							  format(cat), colour=0x03C9A9)
		embed.set_thumbnail(url=cat)
		embed.set_author(name="Random.cat", url='https://random.cat/')
		await ctx.send(embed=embed)


def setup(bot):
	bot.add_cog(Funs(bot))
