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 generateBetweenleHints() {
    const date = new Date().toISOString().split('T')[0];

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

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

    const filePath = path.join(hintsDir, `${date}.json`);

    try {
  
    const browser = await launchBrowser();


        const page = await browser.newPage();
        page.setDefaultNavigationTimeout(90000);

        await page.setBypassCSP(true);
        await page.setJavaScriptEnabled(true);

        await page.setExtraHTTPHeaders({
            "User-Agent":
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
        });

        // Navigate to Betweenle puzzle page
        try {
            await page.goto("https://ladypuzzle.pro/betweenle-hint-answer-finder", {
                waitUntil: "domcontentloaded"
            });
        } catch (e) {
            console.log("Navigation failed, retrying...");
            await new Promise(r => setTimeout(r, 3500));
            await page.goto("https://ladypuzzle.pro/betweenle-hint-answer-finder", {
                waitUntil: "domcontentloaded"
            });
        }

        // Wait for puzzle buttons to appear
        await page.waitForSelector(".puzzle button .back", { timeout: 60000 });

        // Extract letters from back divs and puzzle number from heading
        const puzzleData = await page.evaluate(() => {
            const buttons = Array.from(document.querySelectorAll('.puzzle button'));
            const word = buttons.map(btn => {
                const back = btn.querySelector('.back');
                return back ? back.textContent?.trim() : "";
            }).join('');

            // Extract puzzle number from heading
            const heading = document.querySelector('h1');
            let id = null;
            if (heading && heading.textContent) {
                const match = heading.textContent.match(/Betweenle (\d+)/);
                if (match) {
                    id = parseInt(match[1]);
                }
            }

            return { word, id };
        });

        await browser.close();

        fs.writeFileSync(filePath, JSON.stringify({ date, ...puzzleData }, null, 2));
        console.log(`Successfully generated Betweenle hints: ${filePath}`);

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

    } catch (error) {
        console.error("Error in generateBetweenleHints:", error);
    }
};

if (require.main === module) {
    generateBetweenleHints();
}

