const { SlashCommandBuilder, MessageFlags } = require('discord.js');

module.exports = {
	data: new SlashCommandBuilder()
		.setName('trad')
		.setDescription('Traduit le message indiqué en français')
		.addStringOption(option =>
			option.setName('liens')
				.setDescription('Lien(s) du/des message(s) à traduire (séparés par des espaces)')
				.setRequired(false)
		),
	async execute(interaction, translator) {

		let messagesToTranslate = [];
		const messageLiens = interaction.options.getString('liens');

		if (messageLiens) {
			// Extraire les IDs des liens Discord multiples
			const linkPattern = /https:\/\/discord\.com\/channels\/(\d+)\/(\d+)\/(\d+)/g;
			const matches = [...messageLiens.matchAll(linkPattern)];
			
			if (matches.length === 0) {
				await interaction.reply({ content: '❌ Aucun lien de message valide trouvé. Utilisez des liens Discord valides.', flags: MessageFlags.Ephemeral});
				return;
			}

			for (const match of matches) {
				const [, guildId, channelId, messageId] = match;
				
				try {
					const channel = await interaction.client.channels.fetch(channelId);
					const message = await channel.messages.fetch(messageId);
					messagesToTranslate.push(message);
				} catch (error) {
					console.error(`Impossible de récupérer le message ${messageId}:`, error);
				}
			}
		} else {
			// Si pas de lien, chercher le message précédent
			if (interaction.channel && interaction.channel.lastMessage) {
				const messages = await interaction.channel.messages.fetch({ limit: 2 });
				const messagesArray = Array.from(messages.values());
				const messageToTranslate = messagesArray[1];
				if (messageToTranslate) {
					messagesToTranslate.push(messageToTranslate);
				}
			}
		}

		if (messagesToTranslate.length === 0) {
			await interaction.reply({ content: '❌ Aucun message à traduire trouvé.', flags: MessageFlags.Ephemeral });
			return;
		}

		// Supprimer le message de commande
		await interaction.deferReply({ flags: MessageFlags.Ephemeral });
		await interaction.deleteReply();

		// Traiter chaque message
		for (const messageToTranslate of messagesToTranslate) {
			if (!messageToTranslate.content || messageToTranslate.content.trim() === '') {
				continue;
			}

			try {
				// Traduire le message en français
				const result = await translator.translateText(messageToTranslate.content, null, 'fr');
				
				const footer = `\n\n*Message original de ${messageToTranslate.author.username} dans ${messageToTranslate.channel.name}*`;
				const translatedText = result.text;

				// Vérifier la longueur et diviser si nécessaire
				if ((translatedText + footer).length > 2000) {
					const maxContentLength = 2000 - footer.length - 15; // -15 pour " *(suite...)*"
					const chunks = [];
					
					// Diviser le texte en chunks
					for (let i = 0; i < translatedText.length; i += maxContentLength) {
						chunks.push(translatedText.substring(i, i + maxContentLength));
					}

					// Envoyer tous les chunks
					for (let i = 0; i < chunks.length; i++) {
						const isLast = i === chunks.length - 1;
						const chunkMessage = chunks[i] + (isLast ? footer : ' *(suite...)*');
						await interaction.channel.send(chunkMessage);
					}
				} else {
					await interaction.channel.send(translatedText + footer);
				}
				
			} catch (error) {
				console.error('Erreur lors de la traduction:', error);
				await interaction.channel.send('❌ Erreur lors de la traduction du message.');
			}
		}
	},
};
