use crate::ParseError;
pub(crate) const GRID: [char; 25] = [
'V', 'W', 'X', 'Y', 'Z', 'Q', 'R', 'S', 'T', 'U', 'L', 'M', 'N', 'O', 'P', 'F', 'G', 'H', 'J',
'K', 'A', 'B', 'C', 'D', 'E',
];
#[cfg(feature = "tetrads")]
pub(crate) const TETRAD_GRID: [char; 25] = [
'A', 'F', 'K', 'Q', 'V', 'B', 'G', 'L', 'R', 'W', 'C', 'H', 'M', 'S', 'X', 'D', 'I', 'N', 'T',
'Y', 'E', 'J', 'P', 'U', 'Z',
];
const GRID_WIDTH: usize = 5;
pub(crate) fn coords_to_grid(column: usize, row: usize, grid: &[char]) -> char {
let index = column + (GRID_WIDTH * row);
grid[index]
}
pub(crate) fn grid_to_coords(square: &char, grid: &[char]) -> Result<(usize, usize), ParseError> {
let index = grid
.iter()
.position(|x| x.eq_ignore_ascii_case(square))
.ok_or_else(|| ParseError::InvalidString(format!("{square} is not a valid grid square.")))?;
let column = index % GRID_WIDTH;
let row = index / GRID_WIDTH;
Ok((column, row))
}