use term_grid::{Direction, Filling, Grid, GridOptions};

pub fn print_as_grid<T: AsRef<str>>(strings: &[T]) {
    if print_as_grid_inner(strings).is_none() {
        for string in strings {
            eprintln!("{}", string.as_ref());
        }
    }
}

fn print_as_grid_inner<T: AsRef<str>>(strings: &[T]) -> Option<()> {
    let mut grid = Grid::new(GridOptions {
        filling: Filling::Spaces(2),
        direction: Direction::LeftToRight,
    });

    for string in strings {
        grid.add(string.as_ref().into());
    }

    let width = console::Term::stderr()
        .size_checked()
        .map(|(_rows, cols)| cols)?;
    let grid = grid.fit_into_width(width.into())?;

    eprint!("{grid}");
    Some(())
}
