#[cfg(unix)]
mod unix;
#[cfg(windows)]
mod windows;
use std::cmp::max;
#[cfg(unix)]
pub use unix::size;
#[cfg(windows)]
pub use windows::size;
#[cfg(all(not(unix), not(windows)))]
pub fn size() -> Option<(u16, u16)> {
#[cfg(debug_assertions)]
eprintln!("unable to get terminal size");
None
}
pub fn fit((w, h): (u32, u32)) -> (u32, u32) {
if let Some((mw, mh)) = size().map(|(a, b)| (a as u32, b as u32)) {
match () {
() if w <= mw && h <= 2 * mh => (w, 2 * max(1, h / 2 + h % 2) - h % 2),
() if mw * h <= w * 2 * mh => (mw, 2 * max(1, h * mw / w / 2) - h % 2),
() => (w * 2 * mh / h, 2 * max(1, 2 * mh / 2) - h % 2),
}
} else {
(w, h)
}
}