import { GuildMember, EmbedBuilder } from 'discord.js';
import { EventHandler } from '../utils/types';
import { context } from '../config/context';
import { settingsStore } from '../config/state';

const event: EventHandler = {
  name: 'guildMemberAdd',
  execute(member: GuildMember) {
    const guildConfig = settingsStore.get(member.guild.id);
    const welcomeCfg = guildConfig?.welcomeConfig || guildConfig?.automodConfig?.welcomeConfig;
    if (welcomeCfg?.enabled && welcomeCfg.channelId) {
      const channel = member.guild.channels.cache.get(welcomeCfg.channelId);
      if (channel && channel.isTextBased()) {
        const files: any[] = [];
        const colorVal = parseInt((welcomeCfg.embedColor || '00ff99').replace('#', ''), 16);
        const embed = new EmbedBuilder()
          .setTitle(welcomeCfg.embedTitle || 'Willkommen!')
          .setDescription(welcomeCfg.embedDescription || `${member} ist beigetreten.`)
          .setColor(isNaN(colorVal) ? 0x00ff99 : colorVal);
        const footerText = (welcomeCfg.embedFooter || '').trim();
        if (footerText) {
          embed.setFooter({ text: footerText });
        }
        if (welcomeCfg.embedThumbnailData && welcomeCfg.embedThumbnailData.startsWith('data:')) {
          const [meta, b64] = welcomeCfg.embedThumbnailData.split(',');
          const ext = meta.includes('gif') ? 'gif' : 'png';
          const buf = Buffer.from(b64, 'base64');
          const name = `welcome-thumb.${ext}`;
          files.push({ attachment: buf, name });
          embed.setThumbnail(`attachment://${name}`);
        } else if (welcomeCfg.embedThumbnail) {
          embed.setThumbnail(welcomeCfg.embedThumbnail);
        }
        if (welcomeCfg.embedImageData && welcomeCfg.embedImageData.startsWith('data:')) {
          const [meta, b64] = welcomeCfg.embedImageData.split(',');
          const ext = meta.includes('gif') ? 'gif' : 'png';
          const buf = Buffer.from(b64, 'base64');
          const name = `welcome-image.${ext}`;
          files.push({ attachment: buf, name });
          embed.setImage(`attachment://${name}`);
        } else if (welcomeCfg.embedImage) {
          embed.setImage(welcomeCfg.embedImage);
        }
        channel.send({ embeds: [embed], files }).catch(() => undefined);
      }
    } else if (guildConfig?.welcomeChannelId) {
      const channel = member.guild.channels.cache.get(guildConfig.welcomeChannelId);
      if (channel && channel.isTextBased()) {
        channel.send({ content: `Willkommen ${member}!` }).catch(() => undefined);
      }
    }
    context.logging.logMemberJoin(member);
    context.stats.refreshGuild(member.guild.id).catch(() => undefined);
  }
};

export default event;
