#!/usr/bin/env bash
# pi-epic-status [--ready [--quiet]] [--json]
#
# Read-only status report for the active epic.
#
# Default mode:
#   - Epic meta
#   - DAG with each feature's state
#   - Recent run-log entries
#   - Open halt-reports
#
# --ready mode (v0.6.1):
#   List features that are *currently dispatchable* — own state is
#   pending or halted-ambiguous AND every dep is merged (or archived
#   under features/done/). Intended for manual parallelism: open a
#   second pi session, pick a different ready id, dispatch by hand.
#
# --ready --quiet:
#   Same set, but emit one feature id per line. Scripting-friendly.
#   `pi-epic-status --ready --quiet | xargs -I{} echo {}` style.

set -euo pipefail

mode="full"
quiet=0
while [[ $# -gt 0 ]]; do
    case "$1" in
        --ready) mode="ready" ;;
        --json) mode="json" ;;
        --quiet|-q) quiet=1 ;;
        -h|--help)
            sed -n '2,20p' "$0" | sed 's/^# \{0,1\}//'
            exit 0
            ;;
        *) echo "unknown flag: $1" >&2; exit 1 ;;
    esac
    shift
done

# Resolve script dir through symlinks so we can source siblings reliably.
__src="${BASH_SOURCE[0]}"
while [ -L "$__src" ]; do
    __dir="$(cd -P "$(dirname "$__src")" && pwd)"
    __src="$(readlink "$__src")"
    [[ $__src != /* ]] && __src="$__dir/$__src"
done
__SCRIPT_DIR="$(cd -P "$(dirname "$__src")" && pwd)"
source "$__SCRIPT_DIR/_common.sh"

# Source lib sub-files
__LIB_DIR="$__SCRIPT_DIR/../lib"
source "$__LIB_DIR/pi-epic-status-ready.sh"
source "$__LIB_DIR/pi-epic-status-features.sh"
source "$__LIB_DIR/pi-epic-status-runlog.sh"
source "$__LIB_DIR/pi-epic-status-batches.sh"
source "$__LIB_DIR/pi-epic-status-halts.sh"
source "$__LIB_DIR/pi-epic-status-json.sh"

# Resolve epic context
epic_dir=$(active_epic_dir 2>/dev/null) || {
    if [[ "$mode" == "json" ]]; then
        echo '{"error": "not in an epic working tree"}' >&2
        exit 2
    fi
    # Re-run without suppression to show the original error message
    active_epic_dir
    exit 1
}
epic_id=$(active_epic_id)

# Dispatch
case "$mode" in
    ready)
        render_ready "$epic_dir" "$quiet"
        exit 0
        ;;
    json)
        emit_json "$epic_dir" "$epic_id"
        ;;
    full)
        echo "Epic: $epic_id"
        echo "Folder: $epic_dir"
        echo
        render_test_cmd_warning "$epic_dir"
        render_version_info
        render_meta "$epic_dir"
        render_halts "$epic_dir"
        render_batches "$epic_dir"
        render_features "$epic_dir"
        render_runlog "$epic_dir"
        ;;
esac
