// Tried something to make it work purely with slash commands but it did not work.
// The interaction created from a modal lack the showModal function so I can't just call another modal on top
// A "solution" for this that I could see is creating a button between each response asking the player to continue or stop which would create a new interaction and (maybe) allow to display a new modal
import { SlashCommandBuilder, ActionRowBuilder, TextInputBuilder, SelectMenuBuilder, ModalBuilder, TextInputStyle, InteractionType } from 'discord.js';

export default {
	data: new SlashCommandBuilder()
		.setName('guess')
		.setDescription('Guess the number'),
	category: 'fun',
	async execute(interaction, args, client) {
		const row = new ActionRowBuilder()
			.addComponents(
				new SelectMenuBuilder()
					.setCustomId('difficulty')
					.setPlaceholder('Nothing selected')
					.addOptions([
						{ label: 'Easy', value: '100' },
						{ label: 'Normal', value: '1000' },
						{ label: 'Hard', value: '10000' },
					]),
			);
		await interaction.reply({ content: 'Which difficulty do you want to play?', ephemeral: true, components: [row] });

		let numberTry = 0;
		let secretnumber = 0;

		client.on('interactionCreate', async (interactionMenu) => {
			if (interaction.user !== interactionMenu.user) return;

			const modal = new ModalBuilder()
				.setCustomId('guessModal')
				.setTitle('Your guess');


			const textRow = new ActionRowBuilder()
				.addComponents(
					new TextInputBuilder()
						.setCustomId('input')
						.setLabel('What is the number?')
						.setStyle(TextInputStyle.Short),
				);

			modal.addComponents(textRow);

			async function tryAgain(input) {
				if (input != secretnumber) {
					if (input > secretnumber) {
						modal.setTitle('Its less!\nWhat is the number?');
					}
					else if (input < secretnumber) {
						modal.setTitle('Its more!\nWhat is the number?');
					}
				}
				await interactionMenu.showModal(modal);
			}

			async function checkNumber(input) {
				numberTry++;
				if (input.toLowerCase() === 'stop') {
					return interaction.reply('Ok, let\'s stop playing :(');
				}
				else if (input != secretnumber) {
					console.log('trying again');
					tryAgain(input);
				}
				else if (numberTry > 1) {
					return interaction.reply(`Congratulations! You won! It took you ${numberTry} turns!`);
				}
				else {
					return interaction.reply('Congratulations! You won! It took you 1 Turn!');
				}
			}

			if (interactionMenu.type === InteractionType.ModalSubmit) {
				if (interactionMenu.customId === 'guessModal') {
					const input = interactionMenu.fields.getTextInputValue('input');
					checkNumber(input);
				}

			}
			else if (interactionMenu.isSelectMenu()) {
				if (interactionMenu.customId === 'difficulty') {
					secretnumber = Math.floor((Math.random() * parseInt(interactionMenu.values[0])) + 1);
					console.log(secretnumber);

					// await interaction.followUp({ content: 'What is the number?', ephemeral: true });
					await interactionMenu.showModal(modal);
				}
			}
		});
	},
};