import puppeteer from 'puppeteer';
import fs from 'fs';
import path from 'path';
import { pingDailyPuzzleUpdated } from '../services/indexingService';
import { launchBrowser } from "./puppeteer-launcher";
export async function generateCrosswordHints() {
  try {
      const browser = await launchBrowser();

    const page = await browser.newPage();

   await page.goto('https://ladypuzzle.pro/nyt-crossword-answers-hints', {
  waitUntil: 'networkidle2',
  timeout: 60000,
});


   const crosswordData = await page.evaluate(() => {
  const sections = { across: [] as any[], down: [] as any[] };

  function scrape(sectionEl: any, targetArray: any[]) {
    if (!sectionEl) return;

    sectionEl.querySelectorAll('li.svelte-h3gg7').forEach((li: any) => {
      const number = li.querySelector('.clue-label.svelte-h3gg7')?.textContent?.trim();
      const clue = li.querySelector('.clue-text.svelte-h3gg7 .mr-1.svelte-h3gg7')?.textContent?.trim();

      const btns = li.querySelectorAll('.clue-btn.svelte-h3gg7');
      const answer = btns[0]?.textContent?.trim();

      if (number && clue && answer) {
        targetArray.push({ number, clue, answer });
      }
    });
  }

  scrape(document.querySelector('.clue-list.clue-list-Across'), sections.across);
  scrape(document.querySelector('.clue-list.clue-list-Down'), sections.down);

  return sections;
});


    await browser.close();

    const date = new Date().toISOString().split('T')[0];
    const data = {
      date: date,
      ...crosswordData
    }

    const isProduction = process.env.NODE_ENV === 'production';
    const baseDir = path.join(__dirname, '..', '..', '..');
    const hintsDir = isProduction
      ? path.join(baseDir, 'nytsolvers', 'dist', 'client', 'hints', 'crossword')
      : path.join(baseDir, 'project', 'public', 'hints', 'crossword');

    if (!fs.existsSync(hintsDir)) {
      fs.mkdirSync(hintsDir, { recursive: true });
    }

    fs.writeFileSync(path.join(hintsDir, `${date}.json`), JSON.stringify(data, null, 2));

    console.log('Crossword hints generated successfully in', hintsDir);

    // Trigger search engine indexing (Google Indexing API & Bing IndexNow)
    await pingDailyPuzzleUpdated('crossword-hints', date).catch((err: any) =>
      console.error('[Crossword] Error pinging search indexing:', err.message)
    );
  } catch (error) {
    console.error('Error generating Crossword hints:', error);
  }
}

// Immediately generate hints when the script is run directly
if (require.main === module) {
  generateCrosswordHints();
}
