#![deny(unsafe_code)]
#![allow(clippy::doc_markdown)]
#![doc = include_str!("../README.md")]

pub mod board;
pub mod book;
pub mod mate;
pub(crate) mod simd;
pub mod types;
pub mod records;

// Re-export movegen types at crate root for easier access
pub use board::movegen;

/// 互換性と分かりやすさのため、コアAPIを `rshogi::core::*` にも公開します。
///
/// 現状の実装は crate 直下（`rshogi::board` / `rshogi::types` など）が実体で、
/// `rshogi::core` はそれらへの薄いエイリアスです。
pub mod core {
    pub use super::board;
    pub use super::book;
    pub use super::mate;
    pub use super::movegen;
    pub use super::types;
    pub use super::Engine;
}

/// 核となるエンジンのハンドル。USI インターフェースからの操作を受け取る窓口となります。
pub struct Engine {
    name: &'static str,
}

impl Default for Engine {
    fn default() -> Self {
        Self { name: "rshogi" }
    }
}

impl Engine {
    #[must_use]
    pub fn new() -> Self {
        Self::default()
    }

    /// エンジンの識別名。USI `usi` コマンドに応答する際に利用します。
    #[must_use]
    pub const fn name(&self) -> &'static str {
        self.name
    }
}
