async function classifyNewsletterForm(page) {
    const formInfo = await page.evaluate(() => {
        const results = {
            hasEmailInput: false,
            hasNewsletterKeywords: false,
            hasSearchInput: false,
            hasLoginInput: false,
            hasContactForm: false,
            hasOnlyEmail: false,
            formCount: 0,
            emailInputCount: 0,
            totalInputCount: 0,
            confidence: 0,
            reasons: [],
            signals: {
                positive: [],
                negative: []
            }
        };
        
        const allInputs = document.querySelectorAll('input:not([type="hidden"]):not([type="submit"]):not([type="button"])');
        results.totalInputCount = allInputs.length;
        
        const emailInputs = document.querySelectorAll('input[type="email"], input[name*="email" i], input[id*="email" i], input[placeholder*="email" i]');
        results.emailInputCount = emailInputs.length;
        results.hasEmailInput = emailInputs.length > 0;
        if (results.hasEmailInput) {
            results.signals.positive.push(`Found ${emailInputs.length} email input(s)`);
        }
        
        const pageText = document.body.innerText.toLowerCase();
        const titleText = document.title.toLowerCase();
        const combinedText = pageText + ' ' + titleText;
        
        const newsletterKeywords = [
            'newsletter', 'subscribe', 'signup', 'sign up', 'join our', 'stay updated', 
            'get updates', 'email updates', 'weekly digest', 'monthly newsletter',
            'sign up for updates', 'join the list', 'email list', 'mailing list'
        ];
        
        for (const keyword of newsletterKeywords) {
            if (combinedText.includes(keyword)) {
                results.hasNewsletterKeywords = true;
                results.signals.positive.push(`Keyword: "${keyword}"`);
            }
        }
        
        const searchInputs = document.querySelectorAll('input[type="search"], input[name*="search" i], input[id*="search" i], input[placeholder*="search" i]');
        results.hasSearchInput = searchInputs.length > 0;
        if (results.hasSearchInput) {
            results.signals.negative.push('Search input detected');
            results.reasons.push('Search input detected');
        }
        
        const passwordInputs = document.querySelectorAll('input[type="password"]');
        const usernameInputs = document.querySelectorAll('input[name*="username" i], input[name*="login" i], input[id*="username" i]');
        results.hasLoginInput = passwordInputs.length > 0 || usernameInputs.length > 0;
        if (results.hasLoginInput) {
            results.signals.negative.push('Login/password fields detected');
            results.reasons.push('Login/password fields detected');
        }
        
        const contactKeywords = ['contact us', 'get in touch', 'send message', 'inquiry'];
        for (const keyword of contactKeywords) {
            if (combinedText.includes(keyword)) {
                results.hasContactForm = true;
                results.signals.negative.push(`Contact form keyword: "${keyword}"`);
                break;
            }
        }
        
        const nonEmailInputs = Array.from(allInputs).filter(input => {
            const type = input.type?.toLowerCase();
            const name = input.name?.toLowerCase() || '';
            return type !== 'email' && !name.includes('email');
        });
        
        results.hasOnlyEmail = results.hasEmailInput && nonEmailInputs.length === 0;
        if (results.hasOnlyEmail) {
            results.signals.positive.push('Only email field (no other inputs)');
        }
        
        let score = 0;
        
        if (results.hasEmailInput) score += 40;
        if (results.hasNewsletterKeywords) score += 35;
        if (results.hasOnlyEmail) score += 15;
        if (results.totalInputCount <= 3) score += 10;
        
        if (!results.hasSearchInput) score += 10;
        if (!results.hasLoginInput) score += 15;
        if (!results.hasContactForm) score += 5;
        
        if (results.hasSearchInput) score -= 30;
        if (results.hasLoginInput) score -= 50;
        if (results.hasContactForm && !results.hasNewsletterKeywords) score -= 20;
        
        results.confidence = Math.max(0, Math.min(100, score));
        results.isNewsletter = results.confidence >= 55;
        
        return results;
    });
    
    return formInfo;
}

module.exports = {
    classifyNewsletterForm
};
