from discord.ext import commands
import discord
import random
from typing import Optional

def setup(bot: commands.Bot):
	bot.add_cog(Games(bot))

class Games(commands.Cog):
	"""Gaming commands."""

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


	@commands.command(
		description="Simulate dice rolls.",
		brief="Roll dice",
		help="Roll two dice."
	)
	async def dice(self, ctx: commands.Context, amount: Optional[int], sides: Optional[int]):
		if not amount:
			amount = 2
		if not sides:
			sides = 6

		if amount < 1:
			await ctx.send("You want me to roll less than one die? How!?")
		elif amount > 25:
			await ctx.send("I can not hold so many dice at one time.")
		elif sides < 2:
			await ctx.send("A die has physical minimum of 2 sides. Don't ask for impossible objects.")
		elif sides > 256:
			await ctx.send("My tiny hands can not handle such large dice. Even if both are virtual.")
		else:
			embed = discord.Embed(title = "Dice roll", description=f"Rolling {amount} dice, with {sides} sides.")
			while amount > 0:
				embed.insert_field_at(0, name=f"Die {amount}", value=random.randint(1, sides), inline=True)
				amount -= 1
			await ctx.send(embed=embed)

	@commands.command(
		description="Ask the magic 8-ball.",
		brief="Pose question",
		help="Simulate the iconic 8-ball gimmic.",
		name="8ball"
	)
	async def eightball(self, ctx: commands.Context, *, question: str = None):
		if not question:
			messages = [
				"Don't forget to ask a question...",
				"Hey, that's not a question!",
				"What would you like to know?",
				"You want me to predict nothing?",
				"Are you intentionally not asking a question?",
				"Ask a question you tease!",
				"You will die alone.",
			]
		elif question.strip().count(" ") == 0:
			messages = [
				"What?",
				"That is not a question",
				"Can you use more than one word?",
				"What is the question?",
				"Sorry?"
			]
		elif question.strip()[-1] != "?":
			messages = [
				"Did you forget to end with a question mark?",
				"Is that a statement or question?",
				"Don't questions usually end with a question mark?",
				"Don't forget to use punctuation."
			]
		else:
			messages = [
				"Yes.",
				"No.",
				"Affirmative.",
				"No way!",
				"Negative.",
				"Positive.",
				"Correct.",
				"Incorrect.",
				"Likely",
				"Unlikely",
				"Maybe.",
				"Definately!",
				"Perhaps?",
				"Most indubitably.",
				"Does the pope shit in the woods?",
				"When hell freezes over.",
				"Only between 9 and 5.",
				"Only just before you die.",
				"ERROR: Probability failure.",
				"Ask again later.",
				"I don't know.",
				"Unpredictable.",
				"Unknown",
			]
		await ctx.send(random.choice(messages))
