// 📁 events/interactionCreate.js

const fetch = (...args) => import('node-fetch').then(({ default: fetch }) => fetch(...args));
const {
  ChannelType,
  ButtonBuilder,
  ButtonStyle,
  ActionRowBuilder,
  EmbedBuilder,
  PermissionsBitField,
  ModalBuilder,
  TextInputBuilder,
  TextInputStyle,
} = require('discord.js');

const discordTranscripts = require('discord-html-transcripts');
const config = require('../config');

module.exports = {
  name: 'interactionCreate',

  async execute(interaction, client) {
    if (!interaction.isButton() && !interaction.isModalSubmit()) return;

    const guildId = interaction.guild?.id;
    const guildName = interaction.guild?.name;
    const user = interaction.user;
    const serverConfig = config[guildId];
    if (!serverConfig) return;

    // 🎫 إنشاء تذكرة شراكة
    if (interaction.isButton() && interaction.customId === 'partner_ticket') {
      const ticketChannel = await interaction.guild.channels.create({
        name: `partner-${user.username}`.toLowerCase().replace(/ /g, '-'),
        type: ChannelType.GuildText,
        parent: serverConfig.ticketCategoryId || null,
        topic: `partner-ticket-${user.id};serverId=null;serverName=null`,
        permissionOverwrites: [
          { id: interaction.guild.id, deny: [PermissionsBitField.Flags.ViewChannel] },
          { id: user.id, allow: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.SendMessages] },
          { id: client.user.id, allow: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.SendMessages] },
        ],
      });

      const embed = new EmbedBuilder()
        .setTitle(`📝 طلب شراكة مع ${guildName}`)
        .setColor('#00bcd4')
        .setThumbnail(interaction.guild.iconURL({ dynamic: true }))
        .setDescription(serverConfig.welcomeMessage || 'مرحبًا بك في تذكرة الشراكة! تأكد من قراءة الشروط أدناه بعناية.')
        .addFields(
          { name: '🟢 الشروط الأساسية', value: serverConfig.levels.basic.requirements.join('\n') || 'غير محددة' },
          { name: '🟡 الشروط المتوسطة', value: serverConfig.levels.medium.requirements.join('\n') || 'غير محددة' },
          { name: '🔴 الشروط الكبرى', value: serverConfig.levels.advanced.requirements.join('\n') || 'غير محددة' },
        )
        .setFooter({ text: 'يرجى الالتزام بجميع الشروط قبل تقديم طلب الشراكة' })
        .setTimestamp();

      const sendButton = new ButtonBuilder().setCustomId('submit_partner').setLabel('📤 إرسال رسالة الشراكة').setStyle(ButtonStyle.Primary);
      const closeButton = new ButtonBuilder().setCustomId('close_ticket').setLabel('❌ إغلاق التذكرة').setStyle(ButtonStyle.Danger);

      const row = new ActionRowBuilder().addComponents(sendButton, closeButton);

      await ticketChannel.send({
        content: `# 🤝 ${serverConfig.partnerPrefix || ''} — ${user}`,
        embeds: [embed],
        components: [row],
      });

      await interaction.deferReply({ ephemeral: true });
      await interaction.editReply({ content: `✅ تم فتح تذكرتك بنجاح: ${ticketChannel}` });
    }

    // ❌ إغلاق التذكرة
    if (interaction.isButton() && interaction.customId === 'close_ticket') {
      try {
        const transcript = await discordTranscripts.createTranscript(interaction.channel, {
          limit: -1,
          returnBuffer: false,
          fileName: `transcript-${interaction.channel.name}.html`,
        });

        // 📌 استرجاع بيانات السيرفر من topic
        const topic = interaction.channel.topic || '';
        const parts = topic.split(';');
        const serverId = parts.find(p => p.startsWith('serverId='))?.split('=')[1] || 'غير معروف';
        const serverName = parts.find(p => p.startsWith('serverName='))?.split('=')[1] || 'غير معروف';
        const serverDesc = parts.find(p => p.startsWith('serverDesc='))?.split('=')[1] || 'غير معروف';
        const serverInvite = parts.find(p => p.startsWith('serverInvite='))?.split('=')[1] || 'غير معروف';

        const logChannel = interaction.guild.channels.cache.get(serverConfig.logChannelId);
        if (logChannel) {
          const logEmbed = new EmbedBuilder()
            .setTitle('🔒 تم إغلاق تذكرة')
            .setColor('Red')
            .addFields(
              { name: '👤 بواسطة', value: `${interaction.user.tag} (${interaction.user.id})` },
              { name: '📌 القناة', value: `${interaction.channel.name}` },
              { name: 'اسم السيرفر', value: `${serverName} (${serverId})` },
              { name: 'وصف السيرفر', value: `${serverDesc}` },
              { name: 'رابط السيرفر', value: `${serverInvite}` },
            )
            .setTimestamp();

          await logChannel.send({ embeds: [logEmbed], files: [transcript] });
        }

        await interaction.reply({ content: '🔒 تم إغلاق التذكرة وسيتم حذفها بعد 5 ثوانٍ...', ephemeral: false });
        setTimeout(() => interaction.channel.delete().catch(console.error), 5000);
      } catch (err) {
        console.error('❌ فشل أثناء محاولة إغلاق التذكرة:', err.message);
        await interaction.reply({ content: '❌ حدث خطأ أثناء إغلاق التذكرة.', ephemeral: true });
      }
    }

    // 📤 فتح نموذج الشراكة
    if (interaction.isButton() && interaction.customId === 'submit_partner') {
      const modal = new ModalBuilder()
        .setCustomId('partnerModal')
        .setTitle('📤 إرسال طلب شراكة')
        .addComponents(
          new ActionRowBuilder().addComponents(
            new TextInputBuilder().setCustomId('serverName').setLabel('📛 اسم السيرفر').setStyle(TextInputStyle.Short).setRequired(true)
          ),
          new ActionRowBuilder().addComponents(
            new TextInputBuilder().setCustomId('serverDesc').setLabel('📝 وصف السيرفر').setStyle(TextInputStyle.Paragraph).setRequired(true)
          ),
          new ActionRowBuilder().addComponents(
            new TextInputBuilder().setCustomId('serverInvite').setLabel('🔗 رابط الدعوة').setStyle(TextInputStyle.Short).setRequired(true)
          )
        );

      return interaction.showModal(modal);
    }

    // 📩 إرسال الشراكة
    if (interaction.isModalSubmit() && interaction.customId === 'partnerModal') {
      const fs = require('fs');
      const path = require('path');
      const compelet = require('../compelet.js');

      const name = interaction.fields.getTextInputValue('serverName');
      let desc = interaction.fields.getTextInputValue('serverDesc');
      const invite = interaction.fields.getTextInputValue('serverInvite');

	desc = desc.replace(/(https?:\/\/)?(www\.)?discord\.gg\/\S+/gi, '');
      if (!invite.startsWith('https://discord.gg/')) {
        return await interaction.reply({ content: '🚫 رابط غير صالح.', ephemeral: true });
      }

      try {
        const inviteCode = invite.split('/').pop();
        const response = await fetch(`https://discord.com/api/v10/invites/${inviteCode}?with_counts=true&with_expiration=true`);
        if (!response.ok) throw new Error('Invalid invite');
        const fetchedInvite = await response.json();

        const serverId = fetchedInvite.guild?.id;
        const memberCount = fetchedInvite.approximate_member_count || 0;
        const onlineCount = fetchedInvite.approximate_presence_count || 0;

        if (compelet.partners[serverId]) {
          return await interaction.reply({ content: `🚫 السيرفر **${name}** مسجل بالفعل في قائمة الشراكات.`, ephemeral: true });
        }

        let valid = false;
        let levelUsed = '❌ غير مطابق';
        const { basic, medium, advanced } = serverConfig.levels;

        if (memberCount >= advanced.minMembers && onlineCount >= advanced.minOnline) {
          valid = true; levelUsed = '🔴 كبرى';
        } else if (memberCount >= medium.minMembers && onlineCount >= medium.minOnline) {
          valid = true; levelUsed = '🟡 متوسطة';
        } else if (memberCount >= basic.minMembers && onlineCount >= basic.minOnline) {
          valid = true; levelUsed = '🟢 أساسية';
        }

        if (!valid) {
          return await interaction.reply({
            content: `🚫 السيرفر لا يستوفي شروط الشراكة.\n👥 الأعضاء: **${memberCount}**\n🟢 الأونلاين: **${onlineCount}**`,
            ephemeral: true,
          });
        }

        compelet.partners[serverId] = {
          name, desc, invite,
          addedBy: interaction.user.tag,
          date: new Date().toISOString(),
        };

        const filePath = path.join(__dirname, '../compelet.js');
        fs.writeFileSync(filePath, `module.exports = ${JSON.stringify(compelet, null, 2)};`, 'utf8');

        // 🔑 تحديث topic القناة عشان نخزن بيانات السيرفر
        await interaction.channel.setTopic(`partner-ticket-${interaction.user.id};serverId=${serverId};serverName=${name};serverDesc=${desc};serverInvite=${invite}`);

        const partnerRoom = interaction.guild.channels.cache.get(serverConfig.partnerChannel);
        if (!partnerRoom) {
          return await interaction.reply({ content: '🚫 روم الشراكات غير مضبوط.', ephemeral: true });
        }

        await interaction.reply({ content: `✅ تم قبول الشراكة (${levelUsed})، وجارٍ إرسالها...`, ephemeral: true });
        if (serverConfig.defaultMessage) await interaction.channel.send(serverConfig.defaultMessage);

        await partnerRoom.send(`# ${guildName} 🤝 ${name}\n${desc}\n${invite}`);
        if (serverConfig.gifUrl) await partnerRoom.send(serverConfig.gifUrl);

          // 🎖️ اعطاء رتبة البارتنر للعضو
if (serverConfig.partnerRoleId) {
  const role = interaction.guild.roles.cache.get(serverConfig.partnerRoleId);
  if (role) {
    const member = interaction.guild.members.cache.get(interaction.user.id);
    if (member) {
      await member.roles.add(role).catch(err => {
        console.error('❌ فشل في إعطاء الرتبة:', err);
      });
    }
  }
}

          
        const confirm = await interaction.channel.send('📤 تم إرسال الشراكة بنجاح.');
        setTimeout(() => confirm.delete().catch(() => {}), 5000);

      } catch (err) {
        console.error(err);
        await interaction.reply({ content: '❌ حدث خطأ أثناء معالجة الرابط أو السيرفر غير موجود.', ephemeral: true });
      }
    }
  }
};