import { ButtonInteraction, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, Colors } from 'discord.js';
import { RefinementService } from '../../services/RefinementService';
import { FeverService } from '../../services/FeverService';
import { prisma } from '../../database';
import { SupportedLocale } from '../../i18n';

export const handleRefinementInteraction = async (interaction: ButtonInteraction, locale: SupportedLocale) => {
  const customId = interaction.customId;

  if (customId.startsWith('refine_try_again:')) {
    const parts = customId.split(':');
    const ownerId = parts[1];

    if (interaction.user.id !== ownerId) {
      return interaction.reply({ content: '❌ 본인의 재련 결과만 다시 시도할 수 있습니다.', ephemeral: true });
    }

    // 미니게임 활성화 및 채널 체크
    const config = await prisma.miniGameConfig.findUnique({
      where: { guildId_gameKey: { guildId: interaction.guildId!, gameKey: 'refinement' } }
    });

    if (!config || !config.enabled) {
      return interaction.reply({ content: '❌ 이 서버에서는 재련 미니게임이 비활성화되어 있습니다.', ephemeral: true });
    }

    if (config.channelId && config.channelId !== interaction.channelId) {
      return interaction.reply({ content: `❌ 재련 미니게임은 <#${config.channelId}> 채널에서만 이용 가능합니다.`, ephemeral: true });
    }

    try {
      const result = await RefinementService.tryRefine(interaction.user.id, interaction.guildId!);
      const fever = await FeverService.getFeverBonus(interaction.guildId!);

      const embed = new EmbedBuilder()
        .setTitle(result.success ? '✨ 재련 성공!' : (result.destroyed ? '🧨 무기 파괴!' : '❌ 재련 실패...'))
        .setColor(result.success ? Colors.Green : (result.destroyed ? Colors.Red : Colors.Grey))
        .addFields(
          { name: '강화 단계', value: `${result.levelBefore} → **${result.levelAfter}**`, inline: true },
          { name: '비용', value: `${result.cost} G`, inline: true },
          { name: '잔액', value: `${result.remainingGold} G`, inline: true }
        );

      if (fever.active) {
        embed.setFooter({ text: `🔥 피버 타임 활성화 중! (성공률 +${fever.bonusRate * 100}%)` });
      }

      const retryBtn = new ButtonBuilder()
        .setCustomId(`refine_try_again:${interaction.user.id}`)
        .setLabel('다시 시도')
        .setStyle(ButtonStyle.Primary);

      const row = new ActionRowBuilder<ButtonBuilder>().addComponents(retryBtn);

      // 이미 사용된 버튼 메시지를 업데이트
      return interaction.update({ embeds: [embed], components: [row] });
    } catch (err: any) {
      return interaction.reply({ content: `❌ 오류: ${err.message}`, ephemeral: true });
    }
  }
};
