use blue_archive::{enums::School, fetcher::StudentFetcher, types::students::Age, Language};

#[allow(unused_variables)]
#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // In this example, we will see two different ways of filtering.

    // We can fetch all students first on their own...
    // For this one, we will use Chinese.
    let students = blue_archive::fetch_all_students(Language::Chinese).await?;

    // We will also create a fetcher for later use.
    let fetcher = StudentFetcher::new(Language::Chinese).await?;

    // And now, let us fetch 17 year olds under the Trinity General School.

    // First, let us try with the filter function.
    let trinity_17 = blue_archive::filter(&students)
        .apply(Age(Some(17)))
        .apply(School::Trinity)
        .finish();

    // And now, let us fetch the same thing using the student fetcher.
    // The implementations are relatively identical.
    let trinity_17 = (fetcher.filter())
        .apply(Age(Some(17)))
        .apply(School::Trinity)
        .finish();

    // Let us print out all the filtered students.
    println!(
        "|:: Age 17 & {} : [{}/{}]",
        School::Trinity.full_name(),
        trinity_17.len(),
        students.len(),
    );
    trinity_17.iter().for_each(|student| println!("{student}"));
    // There are way more implementations then shown. You can also implement your own using the StudentFilter if you want!
    Ok(())
}
