use poise::{CreateReply, Modal, send_application_reply};
use poise::serenity_prelude::CreateEmbed;

use crate::{Context, Error};
use crate::claude::DeathByHuaxuResponse;
use crate::errors::HuaxuError;

#[derive(Debug, Modal)]
struct EvaluationModal {
    #[paragraph]
    #[max_length = 200]
    scenario: String,
    #[paragraph]
    #[max_length = 400]
    solution: String,
}

/// Let Huaxu decide your fate!
#[poise::command(slash_command)]
pub(crate) async fn death_by_huaxu(ctx: Context<'_>) -> Result<(), Error> {
    let data = match EvaluationModal::execute(ctx).await? {
        Some(data) => data,
        None => return Err(HuaxuError::EmptyModal.into()),
    };

    let handle = send_application_reply(ctx, CreateReply::default().content("Thinking....")).await?;
    let response = ctx.data().claude.death_by_huaxu(&data.scenario, &data.solution).await?;
    handle.edit(ctx.into(), CreateReply::default().embed(build_embed(
        &response,
        &data.scenario,
        &data.solution,
    ))).await?;

    Ok(())
}

fn build_embed(response: &DeathByHuaxuResponse, scenario: &str, solution: &str) -> CreateEmbed {
    CreateEmbed::default()
        .fields(vec![
            ("Scenario", scenario, false),
            ("Solution", solution, false),
            ("Evaluation", &response.evaluation, false),
            ("Verdict", &response.verdict, false),
        ])
}