use crate::config::{init_mlf_cache, MlfConfig}; use std::io::Write; pub fn run_init(skip_prompts: bool) -> Result<(), std::io::Error> { let current_dir = std::env::current_dir()?; let config_path = current_dir.join("mlf.toml"); // Check if mlf.toml already exists if config_path.exists() { eprintln!("mlf.toml already exists in current directory"); eprintln!("Remove it first if you want to reinitialize"); return Err(std::io::Error::new( std::io::ErrorKind::AlreadyExists, "mlf.toml already exists", )); } if !skip_prompts { println!("Initialize MLF project in {}?", current_dir.display()); println!("This will create:"); println!(" - mlf.toml (project configuration)"); println!(" - .mlf/ (cache directory for fetched lexicons)"); println!(); print!("Continue? (y/n): "); std::io::stdout().flush()?; let mut input = String::new(); std::io::stdin().read_line(&mut input)?; if input.trim().to_lowercase() != "y" { println!("Cancelled"); return Ok(()); } } // Create default mlf.toml let config = MlfConfig::default(); config .save(&config_path) .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; println!("✓ Created mlf.toml"); // Initialize .mlf directory init_mlf_cache(¤t_dir)?; println!("✓ Initialized .mlf/ directory"); println!(); println!("Project initialized successfully!"); println!(); println!("Next steps:"); println!(" 1. Create MLF files in ./lexicons/"); println!(" 2. Fetch dependencies: mlf fetch --save"); println!(" 3. Check your lexicons: mlf check"); println!(" 4. Generate code: mlf generate"); Ok(()) }