import dotenv from 'dotenv';
import path from 'path';
dotenv.config({ path: path.join(__dirname, '../../.env') });

import pool from '../db';
import { buildForecast } from '../services/forecast-builder';

async function regenerateWithPiff() {
  console.log('Regenerating forecasts with PIFF 3.0 data...\n');

  // Get today's events that need fresh forecasts (we expired them earlier)
  const { rows: events } = await pool.query(`
    SELECT re.event_id, re.league, re.home_team, re.away_team,
           re.home_short, re.away_short, re.starts_at,
           re.moneyline, re.spread, re.total
    FROM rm_events re
    LEFT JOIN rm_forecast_cache fc ON fc.event_id = re.event_id AND fc.expires_at > NOW()
    WHERE re.starts_at > NOW()
      AND re.starts_at < NOW() + INTERVAL '2 days'
      AND re.league IN ('nba', 'nhl', 'ncaab', 'epl', 'la_liga', 'bundesliga', 'serie_a', 'ligue_1')
      AND fc.id IS NULL
    ORDER BY re.starts_at
    LIMIT 50
  `);

  console.log(`Found ${events.length} events needing fresh forecasts\n`);

  let regenerated = 0;
  for (const ev of events) {
    try {
      const sgoEvent = {
        eventID: ev.event_id,
        teams: {
          home: { names: { long: ev.home_team, short: ev.home_short || '' } },
          away: { names: { long: ev.away_team, short: ev.away_short || '' } },
        },
        odds: {
          moneyline: ev.moneyline || {},
          spread: ev.spread || {},
          total: ev.total || {},
        },
        status: { startsAt: ev.starts_at, displayShort: 'Scheduled', oddsPresent: true },
        league: ev.league,
      } as any;

      const result = await buildForecast(sgoEvent, ev.league);
      regenerated++;

      const piffCount = result.composite?.modelSignals?.piff?.legCount || 0;
      console.log(`  [OK] ${ev.away_team} @ ${ev.home_team} (${ev.league.toUpperCase()}) — PIFF: ${piffCount} legs, conf: ${(result.composite?.compositeConfidence || 0).toFixed(2)}`);
    } catch (err: any) {
      console.log(`  [FAIL] ${ev.away_team} @ ${ev.home_team}: ${err.message?.slice(0, 100)}`);
    }
  }

  console.log(`\nRegenerated: ${regenerated}/${events.length}`);
  await pool.end();
}

regenerateWithPiff();
