use nu_plugin::PluginCommand;
use nu_protocol::Type;

use crate::SemverPlugin;

mod bump;
mod from_record;
mod into_semver;
mod match_req;
mod root;
mod sort;
mod to_record;

pub fn commands() -> Vec<Box<dyn PluginCommand<Plugin = SemverPlugin>>> {
    vec![
        Box::new(root::SemverCommand),
        Box::new(into_semver::IntoSemver),
        Box::new(to_record::SemverToRecord),
        Box::new(from_record::SemverFromRecord),
        Box::new(bump::SemverBump),
        Box::new(sort::SemverSort),
        Box::new(match_req::SemverMatchReq),
    ]
}

fn record_type() -> Type {
    Type::Record(
        vec![
            ("major".to_string(), Type::Int),
            ("minor".to_string(), Type::Int),
            ("patch".to_string(), Type::Int),
            ("pre".to_string(), Type::String),
            ("build".to_string(), Type::String),
        ]
        .into(),
    )
}

fn custom_type() -> Type {
    Type::Custom("semver".into())
}
