import Surreal from 'surrealdb';
import dotenv from 'dotenv';
dotenv.config();

const db = new Surreal();

async function check() {
  await db.connect(process.env.SURREAL_URL!, {
    namespace: process.env.SURREAL_NAMESPACE!,
    database: process.env.SURREAL_DATABASE!,
    auth: { username: process.env.SURREAL_USER!, password: process.env.SURREAL_PASS! }
  });
  
  // Chercher des écrans indisponibles sur les semaines 6-9
  const campaignWeeks = [6, 7, 8, 9];
  const [screens] = await db.query<any[]>('SELECT name, unavailable_weeks, location FROM screen WHERE is_active = true AND array::len(unavailable_weeks) > 0');
  
  const unavailable = screens.filter((s: any) => {
    return campaignWeeks.some(w => s.unavailable_weeks.includes(w));
  });
  
  console.log('Total écrans avec des indisponibilités:', screens.length);
  console.log('Écrans avec indisponibilités touchant les semaines 6-9:', unavailable.length);
  console.log('Premiers 5:', unavailable.slice(0, 5).map((s: any) => ({ name: s.name, weeks: s.unavailable_weeks })));
  
  // Compter les locations uniques
  const locationIds = new Set(unavailable.map((s: any) => s.location?.toString()));
  console.log('Locations uniques avec écrans indisponibles:', locationIds.size);
  
  // Vérifier les locations avec UN seul écran qui est indisponible
  const [allLocations] = await db.query<any[]>('SELECT id, name FROM location WHERE is_active = true');
  const [allScreens] = await db.query<any[]>('SELECT id, name, location, unavailable_weeks FROM screen WHERE is_active = true');
  
  // Map location -> screens
  const locationScreens = new Map<string, any[]>();
  allScreens.forEach((s: any) => {
    const locId = s.location?.toString();
    if (!locationScreens.has(locId)) {
      locationScreens.set(locId, []);
    }
    locationScreens.get(locId)!.push(s);
  });
  
  // Trouver les locations où TOUS les écrans sont indisponibles
  let fullyUnavailable = 0;
  locationScreens.forEach((screens, locId) => {
    const allUnavailable = screens.every((s: any) => {
      const uw = s.unavailable_weeks || [];
      return campaignWeeks.some(w => uw.includes(w));
    });
    if (allUnavailable) {
      fullyUnavailable++;
      if (fullyUnavailable <= 5) {
        const loc = allLocations.find((l: any) => l.id?.toString() === locId);
        console.log(`Location entièrement indisponible: ${loc?.name} (${screens.length} écrans)`);
        screens.forEach((s: any) => console.log(`  - ${s.name}: semaines ${JSON.stringify(s.unavailable_weeks)}`));
      }
    }
  });
  
  console.log('\nTotal locations entièrement indisponibles:', fullyUnavailable);
  
  await db.close();
}

check().catch(console.error);
