#!/bin/bash
#
# publish-data.sh — upload a combined_users_*.json.gz to S3 and redeploy frontend
#
# 1. Pick a file from backend/data/output (interactive)
# 2. Upload to s3://identity-analysis.dev.theorchard.io/data/
# 3. Build + deploy frontend with VITE_DATA_FILE set to the uploaded filename
#
# Usage: ./scripts/publish-data.sh [filename]
#   If filename is omitted, an interactive picker is shown.

set -euo pipefail

REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
OUTPUT_DIR="$REPO_ROOT/backend/data/output"
FRONTEND_DIR="$REPO_ROOT/frontend"
S3_BUCKET="identity-analysis.dev.theorchard.io"
S3_DATA_PREFIX="data"
CDN_BASE="https://identity-analysis.dev.theorchard.io"

if [ ! -d "$OUTPUT_DIR" ]; then
    echo "Error: $OUTPUT_DIR does not exist" >&2
    exit 1
fi

# === 1. Pick file === #
if [ $# -ge 1 ]; then
    SELECTED="$1"
    if [ ! -f "$OUTPUT_DIR/$SELECTED" ]; then
        echo "Error: $OUTPUT_DIR/$SELECTED not found" >&2
        exit 1
    fi
else
    FILES=()
    while IFS= read -r line; do
        FILES+=("$line")
    done < <(find "$OUTPUT_DIR" -maxdepth 1 -name 'combined_users_*.json.gz' -type f -exec basename {} \; | sort -r)

    if [ ${#FILES[@]} -eq 0 ]; then
        echo "Error: no combined_users_*.json.gz files in $OUTPUT_DIR" >&2
        exit 1
    fi

    echo "Combined users files in $OUTPUT_DIR:"
    for i in "${!FILES[@]}"; do
        printf "  [%d] %s\n" "$((i + 1))" "${FILES[$i]}"
    done
    echo ""
    read -rp "Pick file [1-${#FILES[@]}] (default 1): " CHOICE
    CHOICE="${CHOICE:-1}"

    if ! [[ "$CHOICE" =~ ^[0-9]+$ ]] || [ "$CHOICE" -lt 1 ] || [ "$CHOICE" -gt "${#FILES[@]}" ]; then
        echo "Error: invalid choice" >&2
        exit 1
    fi

    SELECTED="${FILES[$((CHOICE - 1))]}"
fi

LOCAL_PATH="$OUTPUT_DIR/$SELECTED"
S3_KEY="$S3_DATA_PREFIX/$SELECTED"

echo ""
echo "Selected:  $SELECTED"
echo "S3 target: s3://$S3_BUCKET/$S3_KEY"
echo "URL:       $CDN_BASE/$S3_KEY"
echo ""
read -rp "Proceed with upload + deploy? [y/N]: " CONFIRM
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
    echo "Aborted."
    exit 0
fi

# === 2. Upload to S3 === #
echo ""
echo "Uploading to S3..."
aws s3 cp "$LOCAL_PATH" "s3://$S3_BUCKET/$S3_KEY" \
    --content-type "application/x-gzip"

# === 3. Persist VITE_DATA_FILE in frontend/.env === #
ENV_FILE="$FRONTEND_DIR/.env"
echo ""
echo "Updating VITE_DATA_FILE in $ENV_FILE"
if [ -f "$ENV_FILE" ] && grep -q '^VITE_DATA_FILE=' "$ENV_FILE"; then
    # Replace existing line (BSD/GNU sed compatible)
    sed -i.bak "s|^VITE_DATA_FILE=.*|VITE_DATA_FILE=$SELECTED|" "$ENV_FILE"
    rm -f "$ENV_FILE.bak"
else
    printf '\nVITE_DATA_FILE=%s\n' "$SELECTED" >> "$ENV_FILE"
fi

# === 4. Build + deploy frontend === #
echo ""
echo "Building + deploying frontend with VITE_DATA_FILE=$SELECTED"
cd "$FRONTEND_DIR"
export VITE_DATA_FILE="$SELECTED"
./scripts/deploy.sh

echo ""
echo "Done. App: $CDN_BASE/"
