use crate::ui::prelude::*;
use crate::consts::{DOCUMENTATION_RESELLER_API_URL, DOCUMENTATION_USER_API_URL};

pub async fn api_handler(bot: Bot, msg: Message, settings: HandlerSettings) -> HandlerResult {
    let ln = settings.language;

    match api::get_reseller_token(msg.chat.id.0).await {
        Ok(token) => {
            let message = strfmt!(
                t8x!(Ru, r#"
                    Ваш ключ от 📚Реселлер API📚:
                    <code>{token}</code>

                    Чтобы получить <a href="https://www.postman.com/technical-administrator-33862159/vproxy/documentation/d1rhj77/vproxy-public-api?entity=request-38661340-a52f1cd4-a09c-4fd9-b5eb-e22bdc0873ed">📋Пользователь API📋</a> ключ, необходимо
                    авторизироваться используя логин и пароль через
                    эндпоинт {website_url}/public-api/token,
                    см. <a href="https://www.postman.com/technical-administrator-33862159/vproxy/documentation/d1rhj77/vproxy-public-api?entity=request-38661340-a52f1cd4-a09c-4fd9-b5eb-e22bdc0873ed">📋Пользователь API📋</a>
                "#, &ln),
                token,
                website_url => (*WEBSITE_LINK).clone()
            )?;
            
            let reseller_docs_url = reqwest::Url::parse(&(*DOCUMENTATION_RESELLER_API_URL))?;
            let user_docs_url = reqwest::Url::parse(&(*DOCUMENTATION_USER_API_URL))?;
            
            let mut keyboard_rows = vec![
                vec![
                    InlineKeyboardButton::url(
                        t8x!(Ru, "📚Реселлер API📚", &ln),
                        reseller_docs_url,
                    ),
                    InlineKeyboardButton::url(
                        t8x!(Ru, "📋Пользователь API📋", &ln),
                        user_docs_url,
                    ),
                ]
            ];

            let has_password = api::is_password_exists(msg.chat.id.0).await.unwrap_or(true);
            
            if !has_password {
                keyboard_rows.push(vec![InlineKeyboardButton::callback(
                    t8x!(Ru, "🔒Установить пароль🔒", &ln),
                    Callback::SetAccountPassword.to_string(),
                )]);
            }
            
            keyboard_rows.push(vec![InlineKeyboardButton::callback(
                t8x!(Ru, "🔙Назад🔙", &ln),
                Callback::BackToProfile.to_string(),
            )]);
            
            let keyboard = InlineKeyboardMarkup::new(keyboard_rows);

            bot.edit_message_text(msg.chat.id, msg.id, message)
                .link_preview_options(no_preview())
                .reply_markup(keyboard)
                .await?;
        }
        Err(e) => {
            log::error!("Failed to get reseller token: {}", e);
            let message = t8x!(Ru, "Не удалось получить API ключ", &ln);
            let keyboard = InlineKeyboardMarkup::new(vec![
                vec![InlineKeyboardButton::callback(
                    t8x!(Ru, "🔙Назад🔙", &ln),
                    Callback::BackToProfile.to_string(),
                )],
            ]);

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

    Ok(())
}
