use poise::{serenity_prelude::CreateEmbed, CreateReply};
use serde::{Deserialize, Serialize};

use crate::{
    consts::THEME_COLOR,
    models::CtxData,
    utils::{Extract, Recordable},
    Context, Error,
};

#[derive(Serialize, Deserialize, Extract)]
pub struct Options;

impl Recordable for Options {
    async fn run(self, ctx: Context<'_>) -> Result<(), Error> {
        let mut guild_data = ctx.guild_data().await.unwrap()?;
        guild_data.ephemeral_confirmations = true;
        guild_data.commit_changes(&ctx.data().database).await;

        ctx.send(
            CreateReply::default().ephemeral(true).embed(
                CreateEmbed::new()
                    .title("Confirmations ephemeral")
                    .description(concat!(
                        "Reminder and todo confirmations will be sent privately, and removed when ",
                        "your client restarts."
                    ))
                    .color(*THEME_COLOR),
            ),
        )
        .await?;

        Ok(())
    }
}

/// Set reminder confirmations to be sent "ephemerally" (private and cleared automatically)
#[poise::command(
    slash_command,
    rename = "on",
    identifying_name = "set_ephemeral_confirmations",
    guild_only = true
)]
pub async fn set(ctx: Context<'_>) -> Result<(), Error> {
    (Options {}).run(ctx).await
}
