use crate::config::Config;
use crate::error::Result;
pub fn show_config() -> Result<()> {
let config = Config::load()?;
config.validate()?;
let toml_string = toml::to_string_pretty(&config)
.map_err(|e| crate::error::HindsightError::Config(format!("Failed to serialize: {}", e)))?;
println!("Current configuration:\n");
println!("{}", toml_string);
println!("\nConfig file: {:?}", Config::config_path()?);
Ok(())
}
pub fn reset_config() -> Result<()> {
println!("Resetting configuration to defaults...");
Config::reset()?;
println!("✓ Configuration reset successfully");
println!(" Location: {:?}", Config::config_path()?);
Ok(())
}
pub fn validate_config() -> Result<()> {
let config = Config::load()?;
match config.validate() {
Ok(()) => {
println!("✓ Configuration is valid");
Ok(())
}
Err(e) => {
eprintln!("✗ Configuration validation failed:");
eprintln!(" {}", e);
Err(e)
}
}
}
pub fn edit_config() -> Result<()> {
let config_path = Config::config_path()?;
if !config_path.exists() {
println!("Config file doesn't exist. Creating default...");
Config::default().save()?;
}
let editor = std::env::var("EDITOR").unwrap_or_else(|_| "vim".to_string());
println!("Opening config in {}...", editor);
println!(" Location: {:?}", config_path);
let status = std::process::Command::new(&editor)
.arg(&config_path)
.status()?;
if !status.success() {
return Err(crate::error::HindsightError::Config(format!(
"Editor {} exited with error",
editor
)));
}
println!("\nValidating configuration...");
validate_config()?;
Ok(())
}