use crate::cli::ki::{KiArgs, KiCommand, ListArgs};
use crate::context::AppContext;
use crate::error::AppError;
use crate::output;
use crate::services::known_issues::cases;
pub fn run(ctx: &AppContext, args: KiArgs) -> Result<(), AppError> {
match args.command {
KiCommand::List(args) => list(ctx, args),
}
}
fn list(ctx: &AppContext, args: ListArgs) -> Result<(), AppError> {
let target = if args.target.is_absolute() {
args.target
} else if args.target == "." {
ctx.cwd.clone()
} else {
return Err(AppError::Usage("target must be absolute or .".to_string()));
};
if !target.is_dir() {
return Err(AppError::Usage(format!("no directory at {target}")));
}
let cases = cases(&target)?;
if args.json {
return output::json(&cases);
}
let width = cases.iter().map(|case| case.id.len()).max().unwrap_or(0);
for case in &cases {
output::line(format!(
"{:width$} {:<13} {:<10} {:<9} {}",
case.id,
case.state.as_deref().unwrap_or("-"),
case.checked.as_deref().unwrap_or("-"),
case.filing.as_deref().unwrap_or("-"),
case.upstream.as_deref().unwrap_or("-"),
));
}
Ok(())
}