ucui 0.1.4

A minimal UCI engine frontend experiment
mod board;
mod event;
mod footer;
mod home;
mod info;
mod input;
mod logs;
mod play;

use std::fmt::Display;

pub use event::event_loop;

use crate::state::State;

pub const WHITE_PAWN: &str = "";
pub const WHITE_ROOK: &str = "";
pub const WHITE_KNIGHT: &str = "";
pub const WHITE_BISHOP: &str = "";
pub const WHITE_QUEEN: &str = "";
pub const WHITE_KING: &str = "";

pub const BLACK_PAWN: &str = "";
pub const BLACK_ROOK: &str = "";
pub const BLACK_KNIGHT: &str = "";
pub const BLACK_BISHOP: &str = "";
pub const BLACK_QUEEN: &str = "";
pub const BLACK_KING: &str = "";

pub const KEY_GO_HOME: char = '1';
pub const KEY_GO_INFO: char = '2';
pub const KEY_GO_PLAY: char = '3';
pub const KEY_GO_LOGS: char = '4';
pub const KEY_EXPORT_PGN: char = 'p';
pub const KEY_EXPORT_FEN: char = 'f';
pub const KEY_START_GAME: char = ' ';

#[derive(Clone, Eq, PartialEq, Debug, Copy, Default)]
pub enum Screen {
    #[default]
    Home,
    Info,
    Play,
    Log,
}

impl Screen {
    fn name(&self) -> &'static str {
        match self {
            Screen::Home => "Home",
            Screen::Info => "Info",
            Screen::Play => "Play",
            Screen::Log => "Log",
        }
    }
}

impl Display for Screen {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.write_str(self.name())
    }
}

pub fn render(app: &State, frame: &mut ratatui::Frame) {
    let area = footer::render(&app.screen, frame);
    match app.screen {
        Screen::Home => home::render(app, frame, area),
        Screen::Info => info::render(app, frame, area),
        Screen::Play => play::render(app, frame, area),
        Screen::Log => logs::render(app, frame, area),
    }
}