use crate::steps::{cargo, css, html, tailwind, trunk};
use anyhow::{Result, bail};
use colored::Colorize;
use std::fs;
pub fn run_init(name: &str) -> Result<()> {
if std::path::Path::new(name).exists() {
bail!("directory '{}' already exists", name);
}
println!("\n{} {}\n", "Scaffolding".green().bold(), name.bold());
fs::create_dir_all(format!("{}/src", name))?;
fs::create_dir_all(format!("{}/styles", name))?;
fs::create_dir_all(format!("{}/bin", name))?;
println!("{} {}/", "✔".green(), name);
cargo::write_manifest(name)?;
println!("{} Cargo.toml", "✔".green());
cargo::write_main(name)?;
println!("{} src/main.rs", "✔".green());
tailwind::download_binary(name)?;
println!("{} bin/tailwindcss", "✔".green());
css::download_input_css(name)?;
println!("{} styles/input.css", "✔".green());
html::write(name)?;
println!("{} index.html", "✔".green());
trunk::write(name)?;
println!("{} Trunk.toml", "✔".green());
write_gitignore(name)?;
println!("{} .gitignore", "✔".green());
println!("\n{}", "Done! Next steps:".bold());
println!(" cd {}", name);
println!(" trunk serve\n");
Ok(())
}
fn write_gitignore(project: &str) -> Result<()> {
let contents = "/target\n/dist\nstyles/output.css\nbin/\n";
std::fs::write(format!("{}/.gitignore", project), contents)?;
Ok(())
}