#!/usr/bin/env bash
# gather.sh: one-shot dump of everything /daily Step 1 needs.
# Dumb on purpose: it prints, the agent judges. Every section skips cleanly
# when its tool or directory isn't there.
#
# Configure with env vars (or edit the defaults below):
#   DAILY_HOME           map.md + diary/ live here             (default ~/worklog)
#   DAILY_REPO           repo to scan for merges/pushes         (default: none)
#   DAILY_MAIN           mainline branch name                   (default main)
#   DAILY_TICKETS_CMD    prints tickets assigned to you         (default: none)
#   DAILY_MRS_CMD        prints your open PRs/MRs               (default: none)
#   DAILY_SESSION_DIARY  per-session Did/Next entries           (default ~/.claude/diary)
#   DAILY_EFFORTS        dir of <slug>/README.md effort homes   (default: none)
#   DAILY_BOT_AUTHOR     regex for agent commit authors         (default 'bot|agent|cursor')
#
# Examples:
#   DAILY_TICKETS_CMD='gh issue list --assignee @me'
#   DAILY_TICKETS_CMD='jira issue list -a"$(jira me)" -s"In Progress" --plain'
#   DAILY_MRS_CMD='gh pr list --author @me'

set -u
DAILY_HOME="${DAILY_HOME:-$HOME/worklog}"
DAILY_REPO="${DAILY_REPO:-}"
DAILY_MAIN="${DAILY_MAIN:-main}"
DAILY_TICKETS_CMD="${DAILY_TICKETS_CMD:-}"
DAILY_MRS_CMD="${DAILY_MRS_CMD:-}"
DAILY_SESSION_DIARY="${DAILY_SESSION_DIARY:-$HOME/.claude/diary}"
DAILY_EFFORTS="${DAILY_EFFORTS:-}"
DAILY_BOT_AUTHOR="${DAILY_BOT_AUTHOR:-bot|agent|cursor}"

DIARY_DIR="$DAILY_HOME/diary"
TODAY=$(date +%Y-%m-%d)
SINCE_3D=$(date -v-3d +%Y-%m-%d 2>/dev/null || date -d '3 days ago' +%Y-%m-%d)

section() { printf '\n=== %s ===\n' "$1"; }

section "ASSIGNED TICKETS"
if [ -n "$DAILY_TICKETS_CMD" ]; then bash -c "$DAILY_TICKETS_CMD" 2>&1 | head -60
else echo "(DAILY_TICKETS_CMD not set; skipped)"; fi

section "MAP"
cat "$DAILY_HOME/map.md" 2>/dev/null || echo "(no map yet: build one in Step 2)"

LATEST_DIARY=$(ls "$DIARY_DIR"/*.md 2>/dev/null | sort | tail -1)
section "WORKLOG DIARY ($([ -f "$DIARY_DIR/$TODAY.md" ] && echo today || echo 'most recent'))"
[ -n "$LATEST_DIARY" ] && cat "$LATEST_DIARY" || echo "(none)"

# "Since the last /daily" = the newest worklog diary that isn't today's.
LAST_DAILY=$(ls "$DIARY_DIR"/*.md 2>/dev/null | sort | grep -v "/$TODAY.md" | tail -1)
LAST_DAILY_DATE=$(basename "${LAST_DAILY:-1970-01-01.md}" .md)

section "SESSION DIARY since last /daily ($LAST_DAILY_DATE)"
if [ -d "$DAILY_SESSION_DIARY" ]; then
  for f in $(ls "$DAILY_SESSION_DIARY"/*.md 2>/dev/null | sort); do
    d=$(basename "$f" .md)
    [[ "$d" > "$LAST_DAILY_DATE" || "$d" == "$LAST_DAILY_DATE" ]] && { echo "--- $d ---"; cat "$f"; }
  done
else echo "(no session diary dir)"; fi

section "EFFORT READMEs changed since last /daily"
if [ -n "$DAILY_EFFORTS" ] && [ -d "$DAILY_EFFORTS" ]; then
  find "$DAILY_EFFORTS" -mindepth 2 -maxdepth 2 -name README.md -newermt "$LAST_DAILY_DATE" 2>/dev/null | sort | while read -r r; do
    echo "--- $(basename "$(dirname "$r")") ---"
    grep -E '^\*\*(Status|Next|Where):\*\*' "$r"
  done
else echo "(DAILY_EFFORTS not set; skipped)"; fi

section "OPEN PRs/MRs (mine)"
if [ -n "$DAILY_MRS_CMD" ]; then bash -c "$DAILY_MRS_CMD" 2>&1 | head -40
else echo "(DAILY_MRS_CMD not set; skipped)"; fi

if [ -n "$DAILY_REPO" ] && git -C "$DAILY_REPO" rev-parse --git-dir >/dev/null 2>&1; then
  git -C "$DAILY_REPO" fetch --quiet --all 2>/dev/null
  ME=$(git -C "$DAILY_REPO" config user.email)

  section "RECENT MERGES TO $DAILY_MAIN (3 days)"
  git -C "$DAILY_REPO" log "origin/$DAILY_MAIN" --merges --since="$SINCE_3D" --oneline 2>/dev/null | head -30

  section "MY BRANCH PUSHES (tip commits by me, not on $DAILY_MAIN, 3 days)"
  echo "(the 'did I mention this' list: cross-check every row against the map)"
  git -C "$DAILY_REPO" for-each-ref --sort=-committerdate refs/remotes \
    --format='%(objectname:short)  %(committerdate:short)  %(refname:lstrip=3)  %(authoremail)  %(subject)' 2>/dev/null \
    | awk -v since="$SINCE_3D" -v me="<$ME>" '$2 >= since && $4 == me' \
    | grep -vE "  ($DAILY_MAIN|HEAD)  " | cut -c1-140 | head -30

  section "BOT-AUTHORED COMMITS (3 days)"
  git -C "$DAILY_REPO" log --all --since="$SINCE_3D" --format='%h %an  %s' 2>/dev/null \
    | grep -iE "^[0-9a-f]+ [^ ]*($DAILY_BOT_AUTHOR)" | head -20

  section "UNCOMMITTED / UNTRACKED"
  git -C "$DAILY_REPO" status --short 2>/dev/null | head -30
else
  section "REPO"
  echo "(DAILY_REPO not set or not a git repo; merges/pushes/bot commits skipped)"
fi
