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, global = true)]
25 pub format: Option<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 #[command(subcommand)]
44 pub command: Option<Command>,
45}
46
47#[derive(Subcommand, Debug)]
48pub enum Command {
49 Overview,
51
52 Project {
54 #[arg(long)]
56 name: Option<String>,
57
58 #[arg(long, default_value_t = 10)]
60 top: usize,
61 },
62
63 Session {
65 id: Option<String>,
67
68 #[arg(long)]
70 latest: bool,
71 },
72
73 Validate {
75 id: Option<String>,
77
78 #[arg(long)]
80 failures_only: bool,
81 },
82
83 Update {
85 #[arg(long)]
87 check: bool,
88 },
89
90 Trend {
92 #[arg(long, default_value_t = 0)]
94 days: u32,
95
96 #[arg(long, value_enum, default_value_t = GroupBy::Day)]
98 group_by: GroupBy,
99 },
100}