use std::io::Write;
use std::path::PathBuf;
use clap::Args;
use pointbreak::keys::generate_key;
use crate::cli::{json, output};
#[derive(Debug, Args)]
pub(super) struct InitArgs {
#[arg(long, default_value = "default")]
name: String,
#[command(flatten)]
format_args: output::FormatArgs,
}
#[derive(serde::Serialize)]
#[serde(rename_all = "camelCase")]
struct InitBody {
name: String,
did_key: String,
path: PathBuf,
}
pub(super) fn run(
args: InitArgs,
stdout: &mut dyn Write,
) -> Result<(), Box<dyn std::error::Error>> {
let handle = generate_key(&args.name)?;
let body = InitBody {
name: args.name,
did_key: handle.signer_id().as_str().to_owned(),
path: handle.private_key_path().to_owned(),
};
let document = json::DiagnosticDocument::new("shore.keys-init", body, vec![]);
let format =
output::resolve_format(args.format_args.explicit(false), output::OutputFormat::Json)?;
output::write_document_json_fallback(stdout, format, &document)
}