Documentation
use {
	std::io::{IsTerminal, Read},
	whos::domain,
};

fn show_usage() {
	eprintln!("Usage: program DOMAIN\nUsage: whois example.com | program");
}

fn main() {
	let mut stdin = std::io::stdin().lock();
	let result;

	if stdin.is_terminal() {
		let Some(name) = std::env::args().nth(1) else {
			return show_usage();
		};
		result = domain(&name).expect("failed to query");
	} else {
		let mut buf = String::new();
		stdin.read_to_string(&mut buf).expect("failed to read stdin");
		buf = buf.trim().to_string();
		if buf.is_empty() {
			return show_usage();
		}
		result = domain::parse(&buf);
	}

	if result.is_none() {
		return println!("no result");
	}

	match result {
		Some(domain) => println!(
			"domain : {}\ncreated: {}\nexpiry : {}\nname servers: {}",
			domain.name,
			domain.created.map(|dt| dt.to_string()).unwrap_or("unknown".to_string()),
			domain.expiry.map(|dt| dt.to_string()).unwrap_or("unknown".to_string()),
			domain.name_servers.join(" "),
		),
		None => println!("seems to be unregistered"),
	}
}