// Демонстрация получения информации о видео по токену.

use maxbot::{Attachment, MaxClient, SendMessageParamsBuilder, VideoInfo};
use std::path::PathBuf;

#[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. Загружаем видео, чтобы получить токен
    let video_path = PathBuf::from("examples/files/boom.mp4");
    if !video_path.exists() {
        eprintln!("Видеофайл не найден: {:?}", video_path);
        return Ok(());
    }

    println!("Загружаем видео...");
    let video_token = client.upload_file(&video_path, "video").await?;
    println!("✅ Токен загруженного видео: {}", video_token);

    // 2. Ждём 5 секунд, чтобы сервер обработал видео
    println!("Ожидаем обработки видео на сервере...");
    tokio::time::sleep(std::time::Duration::from_secs(5)).await;

    // 3. Получаем информацию о видео через специальный метод
    let info: VideoInfo = client.get_video_info(&video_token).await?;
    println!("\nИнформация о видео:");
    println!("  Токен: {}", info.token);
    println!("  Разрешение: {}x{}", info.width, info.height);
    println!("  Длительность: {} сек", info.duration);
    println!("  Миниатюра: {}", info.thumbnail.url);
    println!("  Доступные адреса:");
    for (k, v) in &info.urls {
        println!("    {}: {}", k, v);
    }

    // 4. Отправляем видео в чат (для наглядности)
    let builder = SendMessageParamsBuilder::new()
        .text("Вот информация о видео (см. консоль)")
        .chat_id(chat_id)
        .attachment(Attachment::video_token(video_token.clone()));

    let mids = client.send_message_builder(builder).await?;
    println!("\n📨 Видео отправлено в чат, mid = {:?}", mids.first().unwrap());

    // 5. Опционально: скачать видео обратно
    if !info.urls.is_empty() {
        println!("\nСкачиваем видео обратно...");
        let data = client.download_video(&video_token).await?;
        let save_path = PathBuf::from("downloaded_video.mp4");
        std::fs::write(&save_path, data)?;
        println!("✅ Видео сохранено как {:?}", save_path);
    }

    Ok(())
}
