mod emit;
mod manifest;
mod select;
mod source;
pub use select::InitOpts;
use anyhow::Result;
use surrealkit::scaffold;
use emit::EmitPlan;
use source::TemplateSource;
pub fn run_init(folder: &str, opts: InitOpts) -> Result<()> {
let template_source = match &opts.from {
Some(from) => TemplateSource::from_arg(from)?,
None => TemplateSource::bundled(opts.template.as_deref())?,
};
let manifest = source::load_manifest(&template_source)?;
let title = manifest.display_name.as_deref().unwrap_or(&manifest.name);
println!("Using template: {title}");
if let Some(desc) = &manifest.description {
println!(" {desc}");
}
println!();
scaffold::scaffold(folder)?;
let feature_ids = select::resolve_features(&manifest, &opts)?;
if feature_ids.is_empty() {
println!("\nNo features selected — scaffolded a bare project.");
return Ok(());
}
let plan = EmitPlan::build(folder, &manifest, &feature_ids, &template_source)?;
println!("\nAdding features: {}", feature_ids.join(", "));
plan.write(opts.force)?;
Ok(())
}