//! Демонстрация отправки сообщений с различными типами вложений:
//! стикер, контакт, геолокация, share (ссылка), inline-клавиатура.
//!
//! # Запуск
//! ```bash
//! export MAXBOT_TOKEN="ваш_токен"
//! export CHAT_ID=-1234567890
//! cargo run --example combined-attachments-demo
//! ```

use maxbot::{
    Attachment, ContactData, InlineKeyboardBuilder, InlineKeyboardButton, MaxClient,
    SendMessageParamsBuilder, ShareData,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let token = std::env::var("MAXBOT_TOKEN").expect("Missing MAXBOT_TOKEN");
    let chat_id = std::env::var("CHAT_ID")
        .expect("Missing CHAT_ID")
        .parse::<i64>()?;
    if let Ok(proxy_url) = std::env::var("MAXBOT_PROXY") {
        maxbot::set_global_base_url(proxy_url);
    }

    let client = MaxClient::new(token);

    // 1. Стикер (отдельное сообщение без текста)
    println!("Отправляем стикер...");
    let builder = SendMessageParamsBuilder::new()
        .chat_id(chat_id)
        .attachment(Attachment::sticker("154ed15bb")); // реальный код стикера
    match client.send_message_builder(builder).await {
        Ok(ids) => println!("  ✅ mid = {:?}", ids.first().unwrap()),
        Err(e) => eprintln!("  ❌ Ошибка: {}", e),
    }

    // 2. Контакт (требуется contact_id)
    println!("Отправляем контакт...");
    // Здесь нужно указать реальный user_id пользователя MAX
    // Можно взять из участников чата или использовать свой собственный ID бота
    let me = client.get_me().await?;
    let contact = ContactData {
        name: Some("Мой бот".to_string()),
        contact_id: Some(me.user.user_id),
        vcf_info: None,
        vcf_phone: None,
    };
    let builder = SendMessageParamsBuilder::new()
        .text("Контакт:")
        .chat_id(chat_id)
        .attachment(Attachment::contact(contact));
    match client.send_message_builder(builder).await {
        Ok(ids) => println!("  ✅ mid = {:?}", ids.first().unwrap()),
        Err(e) => eprintln!("  ❌ Ошибка: {}", e),
    }

    // 3. Геолокация
    println!("Отправляем геолокацию...");
    let builder = SendMessageParamsBuilder::new()
        .text("Геолокация:")
        .chat_id(chat_id)
        .attachment(Attachment::location(55.7558, 37.6176)); // Москва
    match client.send_message_builder(builder).await {
        Ok(ids) => println!("  ✅ mid = {:?}", ids.first().unwrap()),
        Err(e) => eprintln!("  ❌ Ошибка: {}", e),
    }

    // 4. Share (ссылка)
    println!("Отправляем share (ссылку)...");
    let share = ShareData {
        url: Some("https://dev.max.ru".to_string()),
        token: None,
    };
    let builder = SendMessageParamsBuilder::new()
        .text("Полезная ссылка:")
        .chat_id(chat_id)
        .attachment(Attachment::share(share));
    match client.send_message_builder(builder).await {
        Ok(ids) => println!("  ✅ mid = {:?}", ids.first().unwrap()),
        Err(e) => eprintln!("  ❌ Ошибка: {}", e),
    }

    // 5. Inline-клавиатура
    println!("Отправляем inline-клавиатуру...");
    let keyboard = InlineKeyboardBuilder::new()
        // Первая строка с кнопками
        .button(InlineKeyboardButton::link("Последние новости…", "https://www.e1.ru"))
        // Новая строка с кнопками
        .row(vec![InlineKeyboardButton::clipboard("Скопировать код", "SECRET_2026")])
        .button(InlineKeyboardButton::callback("Кнопка", "demo_payload"))
        // Результат
        .build();
    let builder = SendMessageParamsBuilder::new()
        .text("Клавиатура:")
        .chat_id(chat_id)
        .attachment(Attachment::inline_keyboard(keyboard));
    match client.send_message_builder(builder).await {
        Ok(ids) => println!("  ✅ mid = {:?}", ids.first().unwrap()),
        Err(e) => eprintln!("  ❌ Ошибка: {}", e),
    }

    Ok(())
}
