#!/bin/bash
# Full Canonical Data Sync Pipeline
# Runs all canonical linking and fixing scripts to ensure unified database
# Run: Daily at 4 AM UTC (before roster sync at 8 AM)
# Cron: 0 4 * * * /var/www/html/eventheodds/scripts/cron-sync-canonical-full.sh

set -e

LOG_FILE="/var/log/eventheodds/canonical-full-sync.log"
SCRIPTS_DIR="/var/www/html/eventheodds/scripts"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

mkdir -p /var/log/eventheodds

log "=========================================="
log "FULL CANONICAL DATA SYNC PIPELINE"
log "=========================================="

cd /var/www/html/eventheodds

# Step 1: Link by name (catches most unlinked data)
log "Step 1: Running name-based linking..."
timeout 600 npx tsx "$SCRIPTS_DIR/link-by-name.ts" >> "$LOG_FILE" 2>&1 || log "WARNING: Name linking had issues"

# Step 2: Link abbreviated names (NFL M.Lewis, MLB Last,First)
log "Step 2: Running abbreviated name linking..."
timeout 300 npx tsx "$SCRIPTS_DIR/link-abbreviated-names.ts" >> "$LOG_FILE" 2>&1 || log "WARNING: Abbreviated linking had issues"

# Step 3: Fix NHL team assignments
log "Step 3: Fixing NHL team assignments..."
timeout 300 npx tsx "$SCRIPTS_DIR/fix-nhl-teams.ts" >> "$LOG_FILE" 2>&1 || log "WARNING: NHL fix had issues"

# Step 4: Link props via Player table (backfill numeric IDs)
log "Step 4: Linking props via Player table..."
timeout 300 npx tsx "$SCRIPTS_DIR/link-props-via-player-table.ts" >> "$LOG_FILE" 2>&1 || log "WARNING: Props linking had issues"

# Step 5: Run unified sync for any remaining
log "Step 5: Running unified sync..."
timeout 600 npx tsx "$SCRIPTS_DIR/unified-sync.ts" --full >> "$LOG_FILE" 2>&1 || log "WARNING: Unified sync had issues"

# Step 6: Record completion
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "$TIMESTAMP" > /var/www/html/eventheodds/logs/last-canonical-full-sync.txt

# Step 6: Generate final report
log "=========================================="
log "SYNC COMPLETE - COVERAGE REPORT"
log "=========================================="

psql "$SPORTS_DATABASE_URL" -c "
SELECT 'Props' as type, league,
    COUNT(*) as total,
    COUNT(CASE WHEN \"canonicalPlayerId\" IS NOT NULL THEN 1 END) as linked,
    ROUND(COUNT(CASE WHEN \"canonicalPlayerId\" IS NOT NULL THEN 1 END)::numeric / NULLIF(COUNT(*), 0) * 100, 1) as pct
FROM \"PlayerPropLine\"
GROUP BY league
UNION ALL
SELECT 'Metrics' as type, league,
    COUNT(*) as total,
    COUNT(CASE WHEN \"canonicalPlayerId\" IS NOT NULL THEN 1 END) as linked,
    ROUND(COUNT(CASE WHEN \"canonicalPlayerId\" IS NOT NULL THEN 1 END)::numeric / NULLIF(COUNT(*), 0) * 100, 1) as pct
FROM \"PlayerGameMetric\"
GROUP BY league
ORDER BY type, league;
" >> "$LOG_FILE" 2>&1

log "Full canonical sync completed."
