#!/usr/bin/env bash
# ~/.claude/statusline.sh
# StatusLine Claude Code, 2 lignes, orienté session de coding :
#   L1 : modèle · projet · branche git
#   L2 : barre de contexte colorée · coût · diff lignes · durée
#
# Principes : 1 seul parse JSON (jaq), aucune commande lente (pas de df/free),
# git en local, le contexte au centre car c'est la métrique qui dicte /compact.
#
# Install : chmod +x ~/.claude/statusline.sh
# settings.json : { "statusLine": { "type": "command", "command": "~/.claude/statusline.sh", "padding": 0 } }

input=$(cat)

# --- 1 seul parse (jaq = clone Rust de jq, rapide, tourne à chaque tick) ---
IFS=$'\t' read -r model cwd dirname pct cost added removed dur_ms < <(
  printf '%s' "$input" | jaq -r '[
    .model.display_name // "?",
    (.workspace.current_dir // .cwd // ""),
    (.workspace.current_dir // .cwd // "" | split("/") | last),
    (.context_window.used_percentage // 0 | floor),
    (.cost.total_cost_usd // 0),
    (.cost.total_lines_added // 0),
    (.cost.total_lines_removed // 0),
    (.cost.total_duration_ms // 0)
  ] | @tsv'
)

# --- branche git (local, rapide) ---
branch=$(git -C "$cwd" branch --show-current 2>/dev/null)

# --- couleurs ANSI ---
RESET=$'\033[0m'; DIM=$'\033[2m'; BOLD=$'\033[1m'
GREEN=$'\033[32m'; YELLOW=$'\033[33m'; RED=$'\033[31m'; CYAN=$'\033[36m'; BLUE=$'\033[34m'

# --- barre de contexte (10 segments, colorée par seuil) ---
pct=${pct:-0}
filled=$(( pct / 10 ))
bar=""; i=0
while [ $i -lt 10 ]; do
  if [ $i -lt $filled ]; then bar="${bar}█"; else bar="${bar}░"; fi
  i=$((i+1))
done
if   [ "$pct" -ge 80 ]; then ctx=$RED
elif [ "$pct" -ge 60 ]; then ctx=$YELLOW
else ctx=$GREEN; fi

# --- coût & durée formatés ---
cost_fmt=$(printf '$%.2f' "$cost")
dur_s=$(( dur_ms / 1000 ))
dur_fmt=$(printf '%dh%02dm' $((dur_s/3600)) $(((dur_s%3600)/60)))

# --- rendu 2 lignes ---
printf '%s%s%s  %s%s%s%s\n' \
  "$CYAN" "$model" "$RESET" \
  "$BOLD" "$dirname" "$RESET" \
  "${branch:+  ${BLUE}⎇ ${branch}${RESET}}"

printf '%sctx %s %s%%%s  %s│  %s%s%s  %s│  %s+%s/-%s%s  %s│  %s%s%s\n' \
  "$ctx" "$bar" "$pct" "$RESET" \
  "$DIM" "$GREEN" "$cost_fmt" "$RESET" \
  "$DIM" "$GREEN" "$added" "$removed" "$RESET" \
  "$DIM" "$DIM" "$dur_fmt" "$RESET"
