#!/usr/bin/env bash
set -euo pipefail

usage() {
  cat <<'EOF'
Usage:
  task-init T-xxx --goal "Goal text" [--source "Source ref"] [--status queued|active|blocked|done]
EOF
}

TASK_ID="${1:-}"
shift || true
GOAL=""
SOURCE=""
STATUS="queued"
TASKS_ROOT="/home/sebas/work/tasks"

while [[ $# -gt 0 ]]; do
  case "$1" in
    --goal) GOAL="$2"; shift 2 ;;
    --source) SOURCE="$2"; shift 2 ;;
    --status) STATUS="$2"; shift 2 ;;
    -h|--help) usage; exit 0 ;;
    *) echo "Unknown arg: $1" >&2; usage >&2; exit 1 ;;
  esac
done

if [[ -z "$TASK_ID" ]]; then
  echo "task id required" >&2
  usage >&2
  exit 1
fi
if [[ ! "$TASK_ID" =~ ^T-[A-Za-z0-9._-]+$ ]]; then
  echo "task id must look like T-xxx" >&2
  exit 1
fi
if [[ -z "$GOAL" ]]; then
  echo "--goal required" >&2
  exit 1
fi
if [[ ! "$STATUS" =~ ^(queued|active|blocked|done)$ ]]; then
  echo "invalid status: $STATUS" >&2
  exit 1
fi

TASK_DIR="$TASKS_ROOT/$TASK_ID"
mkdir -p "$TASK_DIR/artifacts" "$TASK_DIR/scratch"

README_FILE="$TASK_DIR/README.md"
STATE_FILE="$TASK_DIR/STATE.md"

if [[ ! -e "$README_FILE" ]]; then
  cat > "$README_FILE" <<EOF
# $TASK_ID

## Goal
$GOAL

## Source
- ${SOURCE:-unknown}

## Scope / exclusions
- TODO

## Main repo(s) / path(s)
- TODO
EOF
fi

if [[ ! -e "$STATE_FILE" ]]; then
  cat > "$STATE_FILE" <<EOF
# $TASK_ID state

- Status: $STATUS
- Objective: $GOAL
- Done gate: TODO
- Not doing: TODO
- Reality constraints: TODO
- Current state: just initialized
- Next step: TODO
- Blockers: none
- Evidence: see artifacts/ and add EVIDENCE.md if needed
- Last updated: $(date -u +%Y-%m-%dT%H:%M:%SZ)
EOF
fi

printf 'task_dir=%s\n' "$TASK_DIR"
printf 'readme=%s\n' "$README_FILE"
printf 'state=%s\n' "$STATE_FILE"
printf 'artifacts=%s\n' "$TASK_DIR/artifacts"
printf 'scratch=%s\n' "$TASK_DIR/scratch"
