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

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

    match api::get_banners().await {
        Ok(banners) => {

            if banners.is_empty() {
                let message = t8x!(Ru, "🎉 В данный момент нет активных акций. Следите за обновлениями в нашем канале!", &ln);
                let url = reqwest::Url::parse(&NEWS_CHANNEL_LINK)?;
                let keyboard = InlineKeyboardMarkup::new(vec![vec![InlineKeyboardButton::url(
                    t8x!(Ru, "📢 Наш канал", &ln),
                    url,
                )]]);
                
                bot.send_message(msg.chat.id, message)
                    .reply_markup(keyboard)
                    .await?;
            } else {
                for banner in banners {
                    match api::get_banner_blob(banner.id).await {
                        Ok(image_data) => {
                            let image = InputFile::memory(image_data).file_name(format!("banner_{}.jpg", banner.id));
                            
                            if banner.link.is_empty() || banner.link == "None" {
                                bot.send_photo(msg.chat.id, image).await?;
                            } else {
                                let caption = format!("<a href=\"{}\">{}</a>", 
                                    banner.link, 
                                    t8x!(Ru, "ПЕРЕЙТИ", &ln)
                                );
                                bot.send_photo(msg.chat.id, image)
                                    .caption(caption)
                                    .parse_mode(teloxide::types::ParseMode::Html)
                                    .await?;
                            }
                        }
                        Err(e) => {
                            log::warn!("Failed to get banner blob for banner {}: {}", banner.id, e);
                            continue;
                        }
                    }
                }
                
                bot.send_message(msg.chat.id, t8x!(Ru, "💯Акции и предложения🚩", &ln))
                    .await?;
            }
        }
        Err(e) => {
            log::error!("Failed to get banners: {}", e);
            let message = t8x!(Ru, "Не удалось загрузить акции. Попробуйте позже.", &ln);
            bot.send_message(msg.chat.id, message).await?;
        }
    }
    
    Ok(())
}