use crate::ui::prelude::*;

pub async fn handle_reseller_traffic_change(
    bot: Bot,
    dialogue: MasterDialogue,
    msg: Message,
    user_id: String
) -> HandlerResult {

    let traffic_amount: String;
    match api::get_reseller_profile_by_user_id(user_id.clone()).await {
        Ok(reseller_profile) => {
            traffic_amount = reseller_profile.traffic_formatted;
        },
        Err(e) => {
            log::error!("Error fetching reseller profile: {}", e);
            traffic_amount = "0 GB".to_string();
        }
    }

    let message = strfmt!(r#"
        Текущий трафик: <code>{traffic_formatted}</code>
        Введите количество трафика, добавьте минус в начале, если хотите снять трафик(только целые числа)
    "#,
        traffic_formatted => traffic_amount
    )?;

    bot.edit_message_text(msg.chat.id, msg.id, message).await?;

    dialogue
        .update_admin_kind(AdminStateKind::ReceiveTrafficAmount{ user_id })
        .await?;

    Ok(())
}


pub async fn receive_traffic_amount(
    bot: Bot,
    dialogue: MasterDialogue,
    msg: Message,
    user_id: String,
) -> HandlerResult {
    let text = msg.text().unwrap_or("").trim();

    if text == "" {
        let message = "Произошла ошибка, попробуйте ещё раз";
        bot.send_message(msg.chat.id, message).await?;
    } else {
        match text.parse::<i32>() {
            Ok(traffic_amount) => {
                match api::change_reseller_traffic(user_id, traffic_amount).await {
                    Ok(_) => {
                        let message = "Трафик успешно обновлён!";
                        bot.send_message(msg.chat.id, message).await?;
                    },
                    Err(e) => {
                        log::error!("change_reseller_traffic error: {}", e);

                        let message = "Произошла ошибка при обновлении трафика";
                        bot.send_message(msg.chat.id, message).await?;
                    }
                }
            },
            Err(e) => {
                let message = "Трафик должен быть числом, попробуйте ещё раз";
                bot.send_message(msg.chat.id, message).await?;
            }
        }
    }

    Ok(())
}
