1use clap::{Parser, Subcommand, ValueEnum};
2use std::path::PathBuf;
3
4#[derive(Debug, Clone, ValueEnum)]
5pub enum OutputFormat {
6 Text,
7 Html,
8}
9
10#[derive(Debug, Clone, ValueEnum)]
11pub enum GroupBy {
12 Day,
13 Month,
14}
15
16#[derive(Parser, Debug)]
17#[command(
18 name = "cc-token-usage",
19 version,
20 about = "Analyze Claude Code session token usage, costs, and efficiency"
21)]
22pub struct Cli {
23 #[arg(long, value_enum, default_value_t = OutputFormat::Text, global = true)]
25 pub format: OutputFormat,
26
27 #[arg(long, global = true)]
29 pub output: Option<PathBuf>,
30
31 #[arg(long, global = true)]
33 pub claude_home: Option<PathBuf>,
34
35 #[arg(long, global = true)]
37 pub subscription_price: Option<f64>,
38
39 #[arg(long, global = true)]
41 pub config: Option<PathBuf>,
42
43 #[arg(long, global = true)]
45 pub archive_dir: Option<PathBuf>,
46
47 #[command(subcommand)]
48 pub command: Option<Command>,
49}
50
51#[derive(Subcommand, Debug)]
52pub enum Command {
53 Overview,
55
56 Project {
58 #[arg(long)]
60 name: Option<String>,
61
62 #[arg(long, default_value_t = 10)]
64 top: usize,
65 },
66
67 Session {
69 id: Option<String>,
71
72 #[arg(long)]
74 latest: bool,
75 },
76
77 Validate {
79 id: Option<String>,
81
82 #[arg(long)]
84 failures_only: bool,
85 },
86
87 Trend {
89 #[arg(long, default_value_t = 0)]
91 days: u32,
92
93 #[arg(long, value_enum, default_value_t = GroupBy::Day)]
95 group_by: GroupBy,
96 },
97}