import discord
from discord.ext import commands


class FeedbackForm(discord.ui.Modal, title="Feedback"):
    feedback = discord.ui.TextInput(
        label="What do you think about this bot?",
        style=discord.TextStyle.long,
        placeholder="Type your answer here...",
        required=True,
        max_length=256,
    )

    async def on_submit(self, interaction: discord.Interaction):
        self.interaction = interaction
        self.answer = str(self.feedback)
        self.stop()


def feedback_command():
    @commands.hybrid_command(
        name="feedback", description="Submit a feedback for the owners of the bot"
    )
    async def feedback(self, context):
        if getattr(context, "interaction", None):
            interaction = context.interaction
            feedback_form = FeedbackForm()
            await interaction.response.send_modal(feedback_form)

            await feedback_form.wait()
            interaction = feedback_form.interaction
            await interaction.response.send_message(
                embed=discord.Embed(
                    title="Thank You!",
                    description="Your feedback has been submitted, the owners have been notified about it.",
                    color=0x7289DA,
                ).set_author(
                    name="Feedback System",
                    icon_url="https://yes.nighty.works/raw/gSxqzV.png",
                ),
                ephemeral=True,
            )

            app_owner = (await self.bot.application_info()).owner
            await app_owner.send(
                embed=discord.Embed(
                    title="New Feedback",
                    description=f"{interaction.user} (<@{interaction.user.id}>) has submitted a new feedback:\n```\n{feedback_form.answer}\n```",
                    color=0x7289DA,
                ).set_author(
                    name="Feedback System",
                    icon_url="https://yes.nighty.works/raw/gSxqzV.png",
                )
            )
        else:
            embed = discord.Embed(
                title="Error!",
                description="This command can only be used as a slash command. Please use `/general feedback` instead.",
                color=0xE02B2B,
            )
            embed.set_author(
                name="Feedback System",
                icon_url="https://yes.nighty.works/raw/gSxqzV.png",
            )
            await context.send(embed=embed)

    return feedback
