#!/bin/bash

# Local Validation Script (Dry Run)
# This script runs the full pipeline but writes all output to local files only.
# NO data is uploaded to BigQuery or Feishu - safe for testing and validation.

set -e  # Exit on any error

# Get the script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"

# ============================================================================
# Configuration
# ============================================================================

PROJECTS="${JIRA_PROJECTS:-TCOC,APID,FRM,ST,TCID}"
WINDOW_HOURS="${WINDOW_HOURS:-8}"
OUTPUT_DIR="${OUTPUT_DIR:-$PROJECT_ROOT/test-output/validation}"

# ============================================================================
# Load .env if exists
# ============================================================================

ENV_FILE="$PROJECT_ROOT/.env"
if [ -f "$ENV_FILE" ]; then
    echo "Loading environment from $ENV_FILE"
    while IFS= read -r line || [[ -n "$line" ]]; do
        if [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]]; then
            continue
        fi
        if [[ "$line" =~ ^[[:space:]]*([A-Za-z_][A-Za-z0-9_]*)=(.*)$ ]]; then
            var_name="${BASH_REMATCH[1]}"
            var_value="${BASH_REMATCH[2]}"
            var_value=$(echo "$var_value" | sed 's/^["'\'']\(.*\)["'\'']$/\1/')
            export "$var_name"="$var_value"
        fi
    done < "$ENV_FILE"
fi

# ============================================================================
# Validation
# ============================================================================

mkdir -p "$OUTPUT_DIR"
cd "$PROJECT_ROOT"

eval "$(
    JIRA_PROJECTS="$PROJECTS" \
    TARGET_END_AT="${TARGET_END_AT:-}" \
    WINDOW_HOURS="$WINDOW_HOURS" \
    pnpm exec tsx ./scripts/resolve-sync-window.ts
)"

echo "============================================"
echo "  LOCAL VALIDATION (DRY RUN)"
echo "============================================"
echo ""
echo "Mode:        DRY RUN - No uploads to BigQuery or Feishu"
echo "Jira window: $DATE_RANGE"
echo "UTC anchors: $SYNC_WINDOW_START_UTC to $SYNC_WINDOW_END_UTC"
echo "Projects:    $PROJECTS"
echo "Output dir:  $OUTPUT_DIR"
echo ""

if [ -z "$JIRA_HOST" ] || [ -z "$JIRA_USER_EMAIL" ] || [ -z "$JIRA_API_TOKEN" ]; then
    echo "ERROR: JIRA_HOST, JIRA_USER_EMAIL, and JIRA_API_TOKEN must be set"
    exit 1
fi

if [ -z "$GOOGLE_GENERATIVE_AI_API_KEY" ]; then
    echo "ERROR: GOOGLE_GENERATIVE_AI_API_KEY must be set for AI classification"
    exit 1
fi

JIRA_FILE="$OUTPUT_DIR/01_jira_fetched_${FILE_TAG}.json"
CLASSIFIED_FILE="$OUTPUT_DIR/02_ai_classified_${FILE_TAG}.json"
BIGQUERY_FILE="$OUTPUT_DIR/03_bigquery_format_${FILE_TAG}.json"
MERGE_SQL_FILE="$OUTPUT_DIR/04_merge_sql_${FILE_TAG}.sql"
SUMMARY_FILE="$OUTPUT_DIR/05_validation_summary_${FILE_TAG}.txt"

# ============================================================================
# Step 1: Fetch Jira Issues
# ============================================================================

echo "Step 1/4: Fetching Jira issues..."

pnpm exec tsx ./lib/cli.ts fetch \
    -p "$PROJECTS" \
    --from "$SYNC_WINDOW_START_JQL" \
    --to "$SYNC_WINDOW_END_JQL" \
    -o "$JIRA_FILE"

ISSUE_COUNT=$(node -e "console.log(JSON.parse(require('fs').readFileSync('$JIRA_FILE', 'utf8')).issues.length)")
echo "  → Fetched $ISSUE_COUNT issues"
echo "  → Saved to: $JIRA_FILE"

if [ "$ISSUE_COUNT" -eq 0 ]; then
    echo ""
    echo "WARNING: No issues found in Jira window. Exiting."
    exit 0
fi

# ============================================================================
# Step 2: AI Classification
# ============================================================================

echo ""
echo "Step 2/4: Classifying with AI..."

pnpm exec tsx ./lib/cli.ts classify direct \
    -i "$JIRA_FILE:issues" \
    -p prompt/system_prompt_batch.md \
    -o "$CLASSIFIED_FILE" \
    --model-id "gemini-3.7-flash" \
    --concurrency 5

echo "  → Saved to: $CLASSIFIED_FILE"

# ============================================================================
# Step 3: Transform to BigQuery Format
# ============================================================================

echo ""
echo "Step 3/4: Transforming to BigQuery format..."

pnpm exec tsx ./lib/cli.ts merge \
    -i "$CLASSIFIED_FILE" \
    -o "$BIGQUERY_FILE"

RECORD_COUNT=$(node -e "console.log(JSON.parse(require('fs').readFileSync('$BIGQUERY_FILE', 'utf8')).length)")
echo "  → Transformed $RECORD_COUNT records"
echo "  → Saved to: $BIGQUERY_FILE"

# ============================================================================
# Step 4: Generate MERGE SQL (Dry Run)
# ============================================================================

echo ""
echo "Step 4/4: Generating MERGE SQL (dry run)..."

pnpm exec tsx ./lib/cli.ts upload \
    -i "$BIGQUERY_FILE" \
    --project-id "dry-run-project" \
    --dataset "dry-run-dataset" \
    --table "dry-run-table" \
    --dry-run > "$MERGE_SQL_FILE" 2>&1 || true

echo "  → Saved to: $MERGE_SQL_FILE"

# ============================================================================
# Generate Summary
# ============================================================================

echo ""
echo "Generating validation summary..."

cat > "$SUMMARY_FILE" << EOF
================================================================================
VALIDATION SUMMARY
================================================================================

Run Time:      $(date '+%Y-%m-%d %H:%M:%S')
Mode:          DRY RUN (no uploads)

Configuration:
  Projects:    $PROJECTS
  Jira Window: $DATE_RANGE
  UTC Anchors: $SYNC_WINDOW_START_UTC to $SYNC_WINDOW_END_UTC

Results:
  Issues Fetched:     $ISSUE_COUNT
  Records Generated:  $RECORD_COUNT

Output Files:
  1. Jira Data:       $(basename "$JIRA_FILE")
  2. AI Classified:   $(basename "$CLASSIFIED_FILE")
  3. BigQuery Format: $(basename "$BIGQUERY_FILE")
  4. MERGE SQL:       $(basename "$MERGE_SQL_FILE")
  5. This Summary:    $(basename "$SUMMARY_FILE")

Sample Record (first item):
$(node -e "const d=JSON.parse(require('fs').readFileSync('$BIGQUERY_FILE','utf8'))[0];console.log(JSON.stringify(d,null,2))" 2>/dev/null || echo "  (unable to read)")

================================================================================
EOF

# ============================================================================
# Final Output
# ============================================================================

echo ""
echo "============================================"
echo "  VALIDATION COMPLETE"
echo "============================================"
echo ""
echo "Results:"
echo "  Issues fetched:    $ISSUE_COUNT"
echo "  Records generated: $RECORD_COUNT"
echo ""
echo "Output files in: $OUTPUT_DIR/"
ls -la "$OUTPUT_DIR"/*${FILE_TAG}* 2>/dev/null | awk '{print "  " $NF}' || true
echo ""
echo "To inspect results:"
echo "  cat $SUMMARY_FILE"
echo "  jq '.[0]' $BIGQUERY_FILE"
echo ""
echo "NO DATA WAS UPLOADED - this was a dry run."
