use clap::Parser;
use ghost_client_cli::{VanityCmd, KeySubcommand};

#[derive(Debug, Parser)]
#[command(
    name = "ghostkey",
    author = "f4t50",
    about = "Ghost Key Tool",
    version
)]
pub enum Ghostkey {
    /// Key utility for the CLI
    #[clap(flatten)]
    KeyCli(KeySubcommand),

    /// Sign a message, with a given (secret) key.
    Sign(sc_cli::SignCmd),

    /// Generate a seed that provides a vanity address/
    Vanity(VanityCmd),

    /// Verify a signature for a mesage, provided on STDIN, with a given
    /// (public or secret) key.
    Verify(sc_cli::VerifyCmd),
}

/// Run the ghostkey command, given the appropriate runtime.
pub fn run() -> Result<(), sc_cli::Error> {
    match Ghostkey::parse() {
        Ghostkey::KeyCli(cmd) => cmd.run(cli),
        Ghostkey::Sign(cmd) => cmd.run(),
        Ghostkey::Vanity(cmd) => cmd.run(),
        Ghostkey::Verify(cmd) => cmd.run(),
    }
}