const {
  SlashCommandBuilder,
  EmbedBuilder,
  ModalBuilder,
  TextInputBuilder,
  TextInputStyle,
  ActionRowBuilder,
} = require("discord.js");

module.exports = {
  data: new SlashCommandBuilder()
    .setName("post")
    .setDescription("Create a post in the AeThex community feed")
    .addStringOption((option) =>
      option
        .setName("content")
        .setDescription("Your post content")
        .setRequired(true)
        .setMaxLength(500)
    )
    .addStringOption((option) =>
      option
        .setName("category")
        .setDescription("Post category")
        .setRequired(false)
        .addChoices(
          { name: "💬 General", value: "general" },
          { name: "🚀 Project Update", value: "project_update" },
          { name: "❓ Question", value: "question" },
          { name: "💡 Idea", value: "idea" },
          { name: "🎉 Announcement", value: "announcement" }
        )
    )
    .addAttachmentOption((option) =>
      option
        .setName("image")
        .setDescription("Attach an image to your post")
        .setRequired(false)
    ),

  async execute(interaction, supabase, client) {
    if (!supabase) {
      return interaction.reply({ content: "This feature requires Supabase to be configured.", ephemeral: true });
    }
    await interaction.deferReply({ ephemeral: true });

    try {
      const { data: link } = await supabase
        .from("discord_links")
        .select("user_id, primary_arm")
        .eq("discord_id", interaction.user.id)
        .maybeSingle();

      if (!link) {
        const embed = new EmbedBuilder()
          .setColor(0xff6b6b)
          .setTitle("❌ Not Linked")
          .setDescription(
            "You must link your Discord account to AeThex first.\nUse `/verify` to get started."
          );

        return await interaction.editReply({ embeds: [embed] });
      }

      const { data: profile } = await supabase
        .from("user_profiles")
        .select("username, full_name, avatar_url")
        .eq("id", link.user_id)
        .maybeSingle();

      const content = interaction.options.getString("content");
      const category = interaction.options.getString("category") || "general";
      const attachment = interaction.options.getAttachment("image");

      let imageUrl = null;
      if (attachment && attachment.contentType?.startsWith("image/")) {
        imageUrl = attachment.url;
      }

      const categoryLabels = {
        general: "General",
        project_update: "Project Update",
        question: "Question",
        idea: "Idea",
        announcement: "Announcement",
      };

      const { data: post, error } = await supabase
        .from("community_posts")
        .insert({
          user_id: link.user_id,
          content: content,
          category: category,
          arm_affiliation: link.primary_arm || "general",
          image_url: imageUrl,
          source: "discord",
          discord_message_id: interaction.id,
          discord_author_id: interaction.user.id,
          discord_author_name: interaction.user.username,
          discord_author_avatar: interaction.user.displayAvatarURL(),
        })
        .select()
        .maybeSingle();

      if (error) throw error;

      const successEmbed = new EmbedBuilder()
        .setColor(0x00ff00)
        .setTitle("✅ Post Created!")
        .setDescription(content.length > 100 ? content.slice(0, 100) + "..." : content)
        .addFields(
          {
            name: "📁 Category",
            value: categoryLabels[category],
            inline: true,
          },
          {
            name: "⚔️ Realm",
            value: link.primary_arm || "general",
            inline: true,
          }
        );

      if (imageUrl) {
        successEmbed.setImage(imageUrl);
      }

      successEmbed
        .addFields({
          name: "🔗 View Post",
          value: `[Open in AeThex](https://aethex.dev/community/feed)`,
        })
        .setFooter({ text: "Your post is now live on AeThex!" })
        .setTimestamp();

      await interaction.editReply({ embeds: [successEmbed] });
    } catch (error) {
      console.error("Post command error:", error);
      const embed = new EmbedBuilder()
        .setColor(0xff0000)
        .setTitle("❌ Error")
        .setDescription("Failed to create post. Please try again.");

      await interaction.editReply({ embeds: [embed] });
    }
  },
};
