use std::path::PathBuf;
use clap::{Args, Subcommand};
use openmoat_hosts::Host;
use super::{Format, parse_host};
#[derive(Debug, Subcommand)]
pub enum AuditCommand {
Export(ExportArgs),
Verify(VerifyArgs),
Report(TeamReportArgs),
Anchor(AnchorArgs),
}
#[derive(Debug, Args)]
pub struct TeamReportArgs {
#[arg(required = true)]
pub files: Vec<PathBuf>,
#[arg(long, value_enum, default_value_t = Format::Text)]
pub format: Format,
}
#[derive(Debug, Args)]
pub struct VerifyArgs {
#[arg(required_unless_present = "against")]
pub file: Option<PathBuf>,
#[arg(long, conflicts_with = "against")]
pub anchor: Option<String>,
#[arg(long, conflicts_with = "against")]
pub require_anchor: bool,
#[arg(long, value_name = "GIT_REPO_OR_FILE", conflicts_with = "file")]
pub against: Option<PathBuf>,
#[arg(long, value_enum, default_value_t = Format::Text)]
pub format: Format,
}
#[derive(Debug, Args)]
#[group(required = true, multiple = false)]
pub struct AnchorArgs {
#[arg(long, value_name = "REPO")]
pub git: Option<PathBuf>,
#[arg(long, value_name = "PATH")]
pub file: Option<PathBuf>,
}
#[derive(Debug, Args)]
pub struct ExportArgs {
#[arg(long, default_value = "all")]
pub since: String,
#[arg(long, value_parser = parse_host)]
pub host: Option<Host>,
#[arg(long)]
pub session: Option<String>,
}