//! Отправка контакта с vCard, сгенерированной из имени, телефона, email.

use maxbot::{MaxClient, Attachment, ContactData, SendMessageParamsBuilder};
use maxbot::vcard::{VCard, VCardProperty};

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

    let client = MaxClient::new(token);

    let mut card = VCard::new_v3_0();
    // Полное имя
    let full_name = "Иван Петров";
    card.add_property(VCardProperty::new("FN", full_name));
    // Структурированное имя
    card.add_property(VCardProperty::new_multi("N", vec!["Петров".to_string(), "Иван".to_string(), "".to_string(), "".to_string(), "".to_string()]));

    // Контактные данные
    let mut tel = VCardProperty::new("TEL", "+71234567890");
    tel.params_mut().add_param("TYPE", "CELL");
    card.add_property(tel);

    let mut email = VCardProperty::new("EMAIL", "ivan@example.com");
    email.params_mut().add_param("TYPE", "INTERNET");
    card.add_property(email);

    let vcf = card.to_string()?;

    let contact = ContactData {
        name: Some(full_name.to_string()),
        contact_id: None,
        vcf_info: Some(vcf),
        vcf_phone: Some("+71234567890".to_string()),
    };

    let body = SendMessageParamsBuilder::new()
        .text("Контактные данные:")
        .chat_id(chat_id)
        .attachment(Attachment::contact(contact))
        .build();

    let mids = client.send_message(body).await?;
    println!("Контакт отправлен, mid: {:?}", mids.first().unwrap());
    Ok(())
}
