#!/bin/bash
# vds-skill-search-confluence: search Confluence + Jira for feature discovery context
# Usage: search.sh --feature NAME --query KEYWORDS [--dry-run] [--days N] [--limit N]

# NOTE: No `set -e` — we want full control of the exit-code path.

# Source credentials helper (deployed path: .claude/skills/_shared/vds-skill/credentials.sh)
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=/dev/null
source "$SCRIPT_DIR/../../_shared/vds-skill/credentials.sh"

require_command python3
# Note: require_command vds-cli moved AFTER dry-run check so --dry-run
#       works without vds-cli installed (preview mode).

FEATURE=""
QUERY=""
DAYS=180
LIMIT=30
DRY_RUN=false

while [[ $# -gt 0 ]]; do
    case "$1" in
        --feature) FEATURE="$2"; shift 2 ;;
        --query) QUERY="$2"; shift 2 ;;
        --days) DAYS="$2"; shift 2 ;;
        --limit) LIMIT="$2"; shift 2 ;;
        --dry-run) DRY_RUN=true; shift ;;
        *) echo "Unknown arg: $1" >&2; exit 2 ;;
    esac
done

if [[ -z "$FEATURE" ]]; then
    echo "ERROR: --feature is required" >&2
    exit 2
fi
if [[ -z "$QUERY" ]]; then
    echo "ERROR: --query (search keywords) is required" >&2
    exit 2
fi

# Determine output dir
OUT_DIR=".vsaf/docs/features/$FEATURE"

OUT_JSON="$OUT_DIR/01-discovery-historical.json"
OUT_MD="$OUT_DIR/01-discovery-historical.md"

if [[ "$DRY_RUN" == "true" ]]; then
    SPACE="${VDS_CONFLUENCE_SPACE_DEFAULT:-<VDS_CONFLUENCE_SPACE_DEFAULT>}"
    PROJECT="${VDS_JIRA_PROJECT_DEFAULT:-<VDS_JIRA_PROJECT_DEFAULT>}"
    CQL="space=$SPACE AND text ~ \"$QUERY\" AND lastmodified > now(\"-${DAYS}d\")"
    JQL="project = $PROJECT AND text ~ \"$QUERY\" AND created > -${DAYS}d ORDER BY created DESC"
    echo "DRY-RUN — would execute:"
    echo "  vds-cli confluence search --cql \"$CQL\" --limit $LIMIT --json-only"
    echo "  vds-cli jira search \"$JQL\" --limit $LIMIT --json-only"
    echo "  Write to: $OUT_JSON + $OUT_MD"
    exit 0
fi

require_command vds-cli

# Ensure credentials
ensure_env VDS_CONFLUENCE_TOKEN "Enter VDS Confluence personal access token"
ensure_env VDS_JIRA_TOKEN "Enter VDS Jira personal access token"
ensure_env VDS_CONFLUENCE_SPACE_DEFAULT "Enter default Confluence space key (e.g. ENG)" false
ensure_env VDS_JIRA_PROJECT_DEFAULT "Enter default Jira project key (e.g. NTTC)" false

# Build CQL + JQL (now using real env vars)
CQL="space=$VDS_CONFLUENCE_SPACE_DEFAULT AND text ~ \"$QUERY\" AND lastmodified > now(\"-${DAYS}d\")"
JQL="project = $VDS_JIRA_PROJECT_DEFAULT AND text ~ \"$QUERY\" AND created > -${DAYS}d ORDER BY created DESC"

# Create output dir now (after dry-run exits early)
mkdir -p "$OUT_DIR"

# Execute searches
echo "Searching Confluence (limit $LIMIT, last ${DAYS}d)..."
CONF_RESULTS=$(vds-cli confluence search --cql "$CQL" --limit "$LIMIT" --json-only 2>/dev/null || echo '{"results":[]}')

echo "Searching Jira (limit $LIMIT, last ${DAYS}d)..."
JIRA_RESULTS=$(vds-cli jira search "$JQL" --limit "$LIMIT" --json-only 2>/dev/null || echo '{"issues":[]}')

# Combined JSON output + Markdown summary
python3 - "$CONF_RESULTS" "$JIRA_RESULTS" "$OUT_JSON" "$OUT_MD" "$QUERY" "$DAYS" <<'PYEOF'
import json, sys
conf_raw, jira_raw, out_json, out_md, query, days = sys.argv[1:7]
conf = json.loads(conf_raw) if conf_raw.strip() else {"results":[]}
jira = json.loads(jira_raw) if jira_raw.strip() else {"issues":[]}

combined = {
    "query": query,
    "days_back": int(days),
    "confluence": conf.get("results", []),
    "jira": jira.get("issues", []),
}
with open(out_json, "w") as f:
    json.dump(combined, f, indent=2, ensure_ascii=False)

lines = [
    f"# Discovery Historical Context — {query}",
    f"",
    f"> Generated by /vds-skill-search-confluence — searched last {days} days",
    f"",
    f"## Confluence pages ({len(combined['confluence'])} results)",
    f"",
]
for page in combined["confluence"][:10]:
    title = page.get("title", "<no title>")
    url = page.get("url", page.get("_links", {}).get("webui", ""))
    modified = page.get("lastModified", page.get("version", {}).get("when", "?"))
    lines.append(f"- [{title}]({url}) — modified {modified}")

lines += [
    f"",
    f"## Jira tickets ({len(combined['jira'])} results)",
    f"",
]
for issue in combined["jira"][:15]:
    key = issue.get("key", "?")
    summary = issue.get("fields", {}).get("summary", "<no summary>")
    status = issue.get("fields", {}).get("status", {}).get("name", "?")
    lines.append(f"- **{key}** — {summary} ({status})")

with open(out_md, "w") as f:
    f.write("\n".join(lines) + "\n")

print(f"Wrote: {out_json}")
print(f"Wrote: {out_md}")
PYEOF
