Documentation
use serde::Serialize;

use crate::{LobClient, MailType, Size, UseType};

#[tokio::test]
async fn test() {
    let _ = dotenvy::dotenv();

    let api_key = match std::env::var("LOB_API_KEY") {
        Ok(ok) => ok,
        Err(err) => {
            eprintln!(
                "Did Not Run Lob Test Because `LOB_API_KEY` Could Not Be Retrieved From Environment Variables: {err}"
            );
            return;
        }
    };

    let client = reqwest::Client::new();

    let lob_client = LobClient::builder()
        .client(client)
        .api_key(api_key.as_str())
        .build();

    const CASE_NUMBER: &str = "JP01-25-E01";
    const FRONT_HTML: &str = r#"
<html>
    <head>
    <style>
        p {
            padding: 20px;
        }
    </style>
    </head>
    <body>
        <p>Hello {{case_number}}!</p>
    </body>
</html>
    "#;
    const BACK_HTML: &str = r#"
<html>
    <head>
    <style>
        p {
            padding: 20px;
        }
    </style>
    </head>
    <body>
        <p>Back Side: {{case_number}}!</p>
    </body>
</html>
    "#;

    #[derive(Serialize)]
    struct MergeVar {
        case_number: &'static str,
    }

    let response = lob_client
        .create_postcard()
        .idempotency_key(CASE_NUMBER)
        .name("Spanish Consulate")
        .address_line_1("1800 Bering Dr")
        .address_line_2("750")
        .city("Houston")
        .state("TX")
        .zip_code("77057")
        .front(FRONT_HTML)
        .back(BACK_HTML)
        .use_type(UseType::Marketing)
        .size(Size::FourBySix)
        .mail_type(MailType::UspsFirstClass)
        .description("Postcard To Spanish Consulate")
        .merge(MergeVar {
            case_number: CASE_NUMBER,
        })
        .send()
        .await
        .unwrap();

    println!("{response:#?}");
}