// FormShield Spam Protection
jQuery(document).ready(function($) {
    const DEBUG = false;
    
    const FormShieldSpamCheck = {
        typingPatterns: [],
        pasteCount: 0,
        lastKeyTime: 0,
        
        init: function() {
            this.setupEventListeners();
        },
        
        setupEventListeners: function() {
            // Следим за въвеждане на текст
            $('form textarea, form input[type="text"]').on('keydown', (e) => {
                const now = Date.now();
                
                // Записваме времето между натисканията
                if (this.lastKeyTime) {
                    const timeDiff = now - this.lastKeyTime;
                    this.typingPatterns.push(timeDiff);
                }
                
                this.lastKeyTime = now;
            });
            
            // Следим за paste събития
            $('form textarea, form input[type="text"]').on('paste', (e) => {
                this.pasteCount++;
            });
            
            // Проверяваме формата преди изпращане
            $('form').on('submit', (e) => {
                const form = e.target;
                
                // Събираме данните
                const formData = this.collectFormData(form);
                
                // Добавяме допълнителни проверки
                formData.typing_patterns = this.analyzeTypingPatterns();
                formData.paste_count = this.pasteCount;
                
                // Проверяваме за спам
                this.checkForSpam(form, formData, e);
            });
        },
        
        collectFormData: function(form) {
            const data = {
                content: '',
                email: '',
                fields: {}
            };
            
            // Събираме всички текстови полета
            $(form).find('textarea, input[type="text"], input[type="email"]').each((i, el) => {
                const $el = $(el);
                const name = $el.attr('name');
                const value = $el.val();
                
                data.fields[name] = value;
                
                if ($el.is('textarea')) {
                    data.content += ' ' + value;
                }
                if ($el.attr('type') === 'email') {
                    data.email = value;
                }
            });
            
            return data;
        },
        
        analyzeTypingPatterns: function() {
            if (this.typingPatterns.length < 3) {
                return { suspicious: true, reason: 'too_few_keystrokes' };
            }
            
            // Изчисляваме средното време между натисканията
            const avgTime = this.typingPatterns.reduce((a, b) => a + b, 0) / this.typingPatterns.length;
            
            // Проверяваме за твърде бързо или равномерно писане (бот)
            const isBot = avgTime < 50 || this.isUniformTyping();
            
            return {
                suspicious: isBot,
                avg_time: avgTime,
                pattern_count: this.typingPatterns.length,
                reason: isBot ? 'suspicious_typing_pattern' : null
            };
        },
        
        isUniformTyping: function() {
            // Проверяваме за твърде равномерно време между натисканията
            let uniformCount = 0;
            
            for (let i = 1; i < this.typingPatterns.length; i++) {
                const diff = Math.abs(this.typingPatterns[i] - this.typingPatterns[i-1]);
                if (diff < 10) { // Почти еднакво време
                    uniformCount++;
                }
            }
            
            // Ако повече от 80% са равномерни, вероятно е бот
            return (uniformCount / this.typingPatterns.length) > 0.8;
        },
        
        checkForSpam: function(form, formData, event) {
            // Проверяваме на сървъра
            $.ajax({
                url: formshieldData.ajaxurl,
                type: 'POST',
                data: {
                    action: 'formshield_check_spam',
                    nonce: formshieldData.nonce,
                    content: formData.content,
                    email: formData.email,
                    typing_patterns: JSON.stringify(formData.typing_patterns),
                    paste_count: formData.paste_count
                },
                beforeSend: () => {
                    // Показваме loading състояние
                    $(form).find('input[type="submit"]').prop('disabled', true);
                },
                success: (response) => {
                    if (!response.success) {
                        // Спам е открит
                        event.preventDefault();
                        this.showSpamError(form, response.data);
                        
                    } else {
                    }
                },
                error: (xhr, status, error) => {
                    if (DEBUG) console.error('FormShield: Spam check failed:', error);
                },
                complete: () => {
                    $(form).find('input[type="submit"]').prop('disabled', false);
                }
            });
        },
        
        showSpamError: function(form, data) {
            const errorDiv = $('<div>', {
                class: 'formshield-error',
                html: `
                    <strong>Error:</strong> Your submission was flagged as potential spam.
                    <br>
                    Please review your content and try again.
                `
            }).css({
                color: '#dc3545',
                padding: '10px',
                margin: '10px 0',
                border: '1px solid #dc3545',
                borderRadius: '4px',
                backgroundColor: '#fff'
            });
            
            // Добавяме съобщението
            $(form).prepend(errorDiv);
            
            // Скролваме до него
            $('html, body').animate({
                scrollTop: errorDiv.offset().top - 100
            }, 500);
            
            // Премахваме след 5 секунди
            setTimeout(() => {
                errorDiv.fadeOut('slow', function() {
                    $(this).remove();
                });
            }, 5000);
        }
    };
    
    // Инициализираме защитата
    FormShieldSpamCheck.init();
});
