use dirigent_anth::anth_usage::process_usage_screen;

const SAMPLE: &str = r#"
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   Status   Config   Usage   Stats

  Session
  Total cost:            $0.0000
  Total duration (API):  0s
  Total duration (wall): 4s
  Total code changes:    0 lines added, 0 lines removed
  Usage:                 0 input, 0 output, 0 cache read, 0 cache write

  Current session
  ███████                                            14% used
  Resets 12:30pm (Europe/Vienna)

  Current week (all models)
  ██████                                             12% used
  Resets May 12, 9am (Europe/Vienna)

  Current week (Sonnet only)
                                                     0% used
  Resets May 12, 9am (Europe/Vienna)

  What's contributing to your limits usage?
  Approximate, based on local sessions on this machine — does not include other devices or claude.ai

  Last 24h · these are independent characteristics of your usage, not a breakdown

  97% of your usage came from subagent-heavy sessions
   Each subagent runs its own requests. Be deliberate about spawning them — and
   consider configuring a cheaper model for simpler subagents.

  16% of your usage was at >150k context
   Longer sessions are more expensive even when cached. /compact mid-task, /clear
   when switches to new tasks.

  Subagents               % of usage
  Explore                         3%
  claude-code-guide               2%

  d to day · w to week

  Esc to cancel
"#;

#[test]
fn parses_gauges() {
    let result = process_usage_screen(SAMPLE);
    assert_eq!(result.data.gauges.len(), 3);

    assert_eq!(result.data.gauges[0].name, "Current session");
    assert_eq!(result.data.gauges[0].percent_used, 14);
    assert_eq!(
        result.data.gauges[0].resets.as_deref(),
        Some("12:30pm (Europe/Vienna)")
    );

    assert_eq!(result.data.gauges[1].name, "Current week (all models)");
    assert_eq!(result.data.gauges[1].percent_used, 12);
    assert_eq!(
        result.data.gauges[1].resets.as_deref(),
        Some("May 12, 9am (Europe/Vienna)")
    );

    assert_eq!(result.data.gauges[2].name, "Current week (Sonnet only)");
    assert_eq!(result.data.gauges[2].percent_used, 0);

    // resets_iso should be present for all gauges with reset info
    assert!(result.data.gauges[0].resets_iso.is_some());
    assert!(result.data.gauges[1].resets_iso.is_some());
    assert!(result.data.gauges[2].resets_iso.is_some());

    // Week resets should contain the right date
    let week_iso = result.data.gauges[1].resets_iso.as_ref().unwrap();
    assert!(week_iso.starts_with("2026-05-12") || week_iso.contains("05-12"));
}

#[test]
fn parses_contributions() {
    let result = process_usage_screen(SAMPLE);
    let contrib = result.data.contributions.as_ref().unwrap();

    assert_eq!(contrib.factors.len(), 2);
    assert_eq!(contrib.factors[0].percent, 97);
    assert!(contrib.factors[0].description.contains("subagent-heavy"));
    assert_eq!(contrib.factors[1].percent, 16);

    assert_eq!(contrib.subagents.len(), 2);
    assert_eq!(contrib.subagents[0].name, "Explore");
    assert_eq!(contrib.subagents[0].percent, 3);
    assert_eq!(contrib.subagents[1].name, "claude-code-guide");
    assert_eq!(contrib.subagents[1].percent, 2);
}

#[test]
fn raw_screen_starts_with_rule() {
    let result = process_usage_screen(SAMPLE);
    assert!(result.raw_screen.starts_with('─'));
}
