#!/usr/bin/env npx tsx
/**
 * Check Sports Database - Verify data integrity
 */
require('dotenv').config({ path: '.env.local' });
require('dotenv').config({ path: '.env' });

import { getSportsDb, isSportsDbEnabled } from '../lib/sportsDb';

async function main() {
  if (!isSportsDbEnabled()) {
    console.error('❌ SportsDB not enabled - SPORTS_DATABASE_URL not set');
    process.exit(1);
  }

  const prisma = getSportsDb();
  const leagues = ['nba', 'nfl', 'nhl', 'mlb'];

  console.log('📊 Sports Database Status\n');
  console.log('='.repeat(60));

  // Check games per league
  console.log('\n--- Game Counts ---');
  for (const league of leagues) {
    try {
      const count = await prisma.sportsGame.count({ where: { league } });
      console.log(`${league.toUpperCase()}: ${count.toLocaleString()} games`);
    } catch (e: any) {
      console.log(`${league.toUpperCase()}: Error - ${e.message.slice(0, 50)}`);
    }
  }

  // Check unique teams per league
  console.log('\n--- Unique Teams ---');
  for (const league of leagues) {
    try {
      const homeTeams = await prisma.sportsGame.findMany({
        where: { league },
        distinct: ['homeTeam'],
        select: { homeTeam: true },
      });
      const awayTeams = await prisma.sportsGame.findMany({
        where: { league },
        distinct: ['awayTeam'],
        select: { awayTeam: true },
      });
      const allTeams = new Set([
        ...homeTeams.map((g: any) => g.homeTeam),
        ...awayTeams.map((g: any) => g.awayTeam),
      ]);
      console.log(`${league.toUpperCase()}: ${allTeams.size} unique teams`);

      // Show abbreviated names still present
      const abbreviated = [...allTeams].filter(t => t && t.length <= 4);
      if (abbreviated.length > 0 && abbreviated.length <= 10) {
        console.log(`  ⚠️ Short names: ${abbreviated.join(', ')}`);
      } else if (abbreviated.length > 10) {
        console.log(`  ⚠️ ${abbreviated.length} abbreviated names remain`);
      }
    } catch (e: any) {
      console.log(`${league.toUpperCase()}: Error - ${e.message.slice(0, 50)}`);
    }
  }

  // Check player metrics
  console.log('\n--- Player Metrics ---');
  for (const league of leagues) {
    try {
      const count = await prisma.playerGameMetric.count({ where: { league } });
      console.log(`${league.toUpperCase()}: ${count.toLocaleString()} records`);
    } catch (e: any) {
      console.log(`${league.toUpperCase()}: Error - ${e.message.slice(0, 50)}`);
    }
  }

  // Sample some data for each league
  console.log('\n--- Sample Data ---');
  for (const league of leagues) {
    try {
      const sample = await prisma.sportsGame.findFirst({
        where: { league },
        orderBy: { gameDate: 'desc' },
        select: {
          homeTeam: true,
          awayTeam: true,
          gameDate: true,
          homeScore: true,
          awayScore: true,
        },
      });
      if (sample) {
        const date = sample.gameDate ? new Date(sample.gameDate).toLocaleDateString() : 'N/A';
        console.log(`${league.toUpperCase()}: ${sample.awayTeam} @ ${sample.homeTeam} (${date}) - ${sample.awayScore}-${sample.homeScore}`);
      } else {
        console.log(`${league.toUpperCase()}: No data found`);
      }
    } catch (e: any) {
      console.log(`${league.toUpperCase()}: Error - ${e.message.slice(0, 50)}`);
    }
  }

  console.log('\n' + '='.repeat(60));
  console.log('✅ Check complete');
}

main().catch(console.error);
