use std::time::Duration;

use heed::EnvOpenOptions;
use milli::Index;
use criterion::{criterion_group, criterion_main, BenchmarkId};

fn bench_search(c: &mut criterion::Criterion) {
    let database = "books-4cpu.mmdb";
    let queries = [
        "minogue kylie",
        "minogue kylie live",
    ];

    std::fs::create_dir_all(database).unwrap();
    let env = EnvOpenOptions::new()
        .map_size(100 * 1024 * 1024 * 1024) // 100 GB
        .max_readers(10)
        .max_dbs(5)
        .open(database).unwrap();

    let index = Index::new(&env).unwrap();

    let mut group = c.benchmark_group("search");
    group.sample_size(10);
    group.measurement_time(Duration::from_secs(12));

    for query in &queries {
        group.bench_with_input(BenchmarkId::from_parameter(query), &query, |b, &query| {
            b.iter(|| {
                let rtxn = env.read_txn().unwrap();
                let _documents_ids = index.search(&rtxn, query).unwrap();
            });
        });
    }


    group.finish();
}

criterion_group!(benches, bench_search);
criterion_main!(benches);