use crate::cli::init::InitArgs;
use crate::context::AppContext;
use crate::domain::manifest::{PlanZone, parse_docs_scratch};
use crate::error::AppError;
use crate::output;
use crate::services::installer::{InitOptions, init};
pub fn run(_ctx: &AppContext, args: InitArgs) -> Result<(), AppError> {
let plan_zone = args
.plan_zone
.as_deref()
.map(PlanZone::parse)
.transpose()
.map_err(|error| AppError::Usage(format!("--plan-zone: {error}")))?;
let docs_scratch = args
.docs_scratch
.as_deref()
.map(parse_docs_scratch)
.transpose()
.map_err(|error| AppError::Usage(format!("--docs-scratch: {error}")))?;
let writing_style = args
.writing_style
.as_deref()
.map(crate::domain::instance_config::WritingStyle::parse_flag)
.transpose()
.map_err(|error| AppError::Usage(format!("--writing-style: {error}")))?;
let outcome = init(&InitOptions {
target: args.target,
profile: args.profile,
apply: args.apply,
dry_run: args.dry_run,
plan_zone,
docs_scratch,
reserve: args.reserve,
writing_style,
})?;
for line in &outcome.lines {
output::line(line);
}
Ok(())
}