use rand::{
RngExt,
distr::{Alphanumeric, SampleString},
random,
seq::IndexedRandom,
};
const SCHEMES: [&str; 2] = ["http", "https"];
const SUBDOMAINS: [&str; 4] = ["example", "test", "www.example", "www.test"];
const ROOT_DOMAINS: [&str; 3] = ["com", "net", "org"];
pub(crate) fn gen_uri() -> String {
let mut rng = rand::rng();
let num_chars = rng.random_range(1..=16);
let mut path = Alphanumeric.sample_string(&mut rng, num_chars);
if random::<bool>() {
let num_chars = rng.random_range(1..=16);
let segment = Alphanumeric.sample_string(&mut rng, num_chars);
path.push('/');
path.push_str(&segment);
}
let scheme = SCHEMES.choose(&mut rng).unwrap_or(&"https");
let subdomain = SUBDOMAINS.choose(&mut rng).unwrap_or(&"example");
let root_domain = ROOT_DOMAINS.choose(&mut rng).unwrap_or(&"com");
format!("{scheme}://{subdomain}.{root_domain}/{path}")
}