$(document).ready(function() {

    function showMessage(type, text) {
        const messageId = type + 'Message';
        const $message = $('#' + messageId);
        $message.text(text).fadeIn(300);
        setTimeout(() => {
            $message.fadeOut(300);
        }, 5000);
    }

    function isAdminEmail(email) {
        const adminEmails = ['admin@aeterna.ru', 'administrator@aeterna.ru', 'aeterna@mail.ru'];
        return adminEmails.includes(email.toLowerCase());
    }

    function validateFIO(fio) {
        const words = fio.trim().split(/\s+/);

        const hasNoDigits = !/\d/.test(fio);
        return words.length >= 2 && words.every(word => word.length >= 2) && hasNoDigits;
    }

    function validateCity(city) {
        return city.trim().length >= 2 && /^[а-яА-ЯёЁ\s-]+$/.test(city);
    }

    function validateEmail(email) {
        const localPart = email.split('@')[0];

        if (/[а-яА-ЯёЁ]/.test(localPart)) {
            showError('email', 'В тексте перед знаком "@" не должно быть кириллических символов');
            return false;
        }

        const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        if (!emailRegex.test(email)) {
            showError('email', 'Введите корректный email адрес');
            return false;
        }

        hideError('email');
        return true;
    }

    function validatePhone(phone) {
        const phoneRegex = /^(\+7|8)[\s-]?\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}$/;
        return phoneRegex.test(phone.replace(/\s/g, ''));
    }

    function validatePassword(password) {
        return password.length >= 6;
    }

    function showError(fieldId, message) {
        $('#' + fieldId).addClass('error');
        $('#' + fieldId + '-error').text(message).show();
    }

    function hideError(fieldId) {
        $('#' + fieldId).removeClass('error');
        $('#' + fieldId + '-error').hide();
    }

    function validateForm() {
        let isValid = true;

        const fio = $('#fio').val();
        if (!validateFIO(fio)) {
            if (/\d/.test(fio)) {
                showError('fio', 'ФИО не должно содержать цифры');
            } else {
                showError('fio', 'ФИО должно содержать минимум 2 слова (каждое от 2 символов)');
            }
            isValid = false;
        } else {
            hideError('fio');
        }

        const city = $('#city').val();
        if (!validateCity(city)) {
            showError('city', 'Укажите корректное название города (только русские буквы)');
            isValid = false;
        } else {
            hideError('city');
        }

        const email = $('#email').val();
        if (!validateEmail(email)) {
            showError('email', 'Введите корректный email адрес');
            isValid = false;
        } else {
            hideError('email');
        }

        const phone = $('#phone').val();
        if (!validatePhone(phone)) {
            showError('phone', 'Введите номер в формате: +7(912)999-12-23');
            isValid = false;
        } else {
            hideError('phone');
        }

        const password = $('#password').val();
        if (!validatePassword(password)) {
            showError('password', 'Пароль должен содержать минимум 6 символов');
            isValid = false;
        } else {
            hideError('password');
        }

        const confirmPassword = $('#confirm-password').val();
        if (password !== confirmPassword) {
            showError('confirm-password', 'Пароли не совпадают');
            isValid = false;
        } else {
            hideError('confirm-password');
        }

        if (!$('#privacy').is(':checked')) {
            $('#privacy-error').show();
            isValid = false;
        } else {
            $('#privacy-error').hide();
        }

        return isValid;
    }

    $('input').on('blur', function() {
        const fieldId = $(this).attr('id');
        const value = $(this).val();

        switch(fieldId) {
            case 'fio':
                if (!validateFIO(value)) {
                    if (/\d/.test(value)) {
                        showError(fieldId, 'ФИО не должно содержать цифры');
                    } else {
                        showError(fieldId, 'ФИО должно содержать минимум 2 слова');
                    }
                } else {
                    hideError(fieldId);
                }
                break;
            case 'city':
                if (!validateCity(value)) {
                    showError(fieldId, 'Укажите корректное название города');
                } else {
                    hideError(fieldId);
                }
                break;
            case 'email':
                if (!validateEmail(value)) {
                    showError(fieldId, 'Введите корректный email адрес');
                } else {
                    hideError(fieldId);
                }
                break;
            case 'phone':
                if (!validatePhone(value)) {
                    showError(fieldId, 'Введите номер в формате: +7(912)999-12-23');
                } else {
                    hideError(fieldId);
                }
                break;
            case 'password':
                if (!validatePassword(value)) {
                    showError(fieldId, 'Пароль должен содержать минимум 6 символов');
                } else {
                    hideError(fieldId);
                }
                break;
            case 'confirm-password':
                const password = $('#password').val();
                if (value !== password) {
                    showError(fieldId, 'Пароли не совпадают');
                } else {
                    hideError(fieldId);
                }
                break;
        }
    });

    $('#registrationForm').on('submit', function(e) {
        e.preventDefault();

        if (validateForm()) {
            const email = $('#email').val();
            const isAdmin = isAdminEmail(email);

            const userData = {
                email: email,
                fio: $('#fio').val(),
                phone: $('#phone').val(),
                isAdmin: isAdmin,
                registered: new Date().toISOString()
            };

            localStorage.setItem('userData', JSON.stringify(userData));
            localStorage.setItem('isLoggedIn', 'true');
            localStorage.setItem('isAdmin', isAdmin.toString());

            showMessage('success', 'Регистрация прошла успешно! ' +
                (isAdmin ? 'Вы зарегистрированы как администратор.' : 'Добро пожаловать в AETERNA!'));

            setTimeout(() => {

                window.location.href = 'cite_mebel.php';
            }, 2000);
        } else {
            showMessage('error', 'Пожалуйста, исправьте ошибки в форме');
        }
    });

    $('a[href^="#"]').on('click', function(event) {
        var target = $(this.getAttribute('href'));
        if (target.length) {
            event.preventDefault();
            $('html, body').stop().animate({
                scrollTop: target.offset().top
            }, 1000);
        }
    });

    $('.login-btn').on('click', function() {
        showMessage('warning', 'Переход к форме входа...');
        setTimeout(() => {
            window.location.href = 'login.php';
        }, 1000);
    });

    $('.password-link').on('click', function(e) {
        e.preventDefault();
        showMessage('warning', 'Функция смены пароля будет доступна после регистрации');
    });

    $('#phone').on('input', function() {
        let value = $(this).val().replace(/\D/g, '');
        if (value.startsWith('7') || value.startsWith('8')) {
            value = value.substring(1);
        }
        if (value.length > 0) {
            value = '+7(' + value;
            if (value.length > 6) value = value.substring(0, 6) + ')' + value.substring(6);
            if (value.length > 10) value = value.substring(0, 10) + '-' + value.substring(10);
            if (value.length > 13) value = value.substring(0, 13) + '-' + value.substring(13);
            if (value.length > 16) value = value.substring(0, 16);
        }
        $(this).val(value);
    });

    $('#fio').on('input', function() {
        let value = $(this).val();

        value = value.replace(/\d/g, '');
        $(this).val(value);
    });
});

$(document).ready(function() {

    if (localStorage.getItem('isLoggedIn') === 'true') {
        const userData = JSON.parse(localStorage.getItem('userData') || '{}');
        if (userData.email) {
            $('#login-email').val(userData.email);
        }
    }

    function checkAdminPassword(email, password) {

        const adminAccounts = {
            'admin@aeterna.ru': 'admin123',
            'administrator@aeterna.ru': 'admin123',
            'aeterna@mail.ru': 'admin123'
        };

        return adminAccounts[email.toLowerCase()] === password;
    }

    $('#loginForm').on('submit', function(e) {
        e.preventDefault();

        let isValid = true;
        const email = $('#login-email').val();
        const password = $('#login-password').val();

        if (!isValidEmail(email)) {
            $('#email-error').show();
            isValid = false;
        } else {
            $('#email-error').hide();
        }

        if (password.length < 6) {
            $('#password-error').show();
            isValid = false;
        } else {
            $('#password-error').hide();
        }

        if (isValid) {

            showMessage('success', 'Вы успешно вошли в систему!');

            setTimeout(function() {
                window.location.href = 'cite_mebel.php';
            }, 1500);
        }
    });

    function showMessage(type, text) {
        const messageId = type + 'Message';
        const $message = $('#' + messageId);

        $message.text(text).show();

        setTimeout(function() {
            $message.fadeOut();
        }, 3000);
    }

    $('input').on('focus', function() {
        $(this).next('.error-message').hide();
    });

    $('#remember').on('change', function() {
        if ($(this).is(':checked')) {
            const email = $('#login-email').val();
            if (email) {
                localStorage.setItem('rememberedEmail', email);
            }
        } else {
            localStorage.removeItem('rememberedEmail');
        }
    });

    const rememberedEmail = localStorage.getItem('rememberedEmail');
    if (rememberedEmail) {
        $('#login-email').val(rememberedEmail);
        $('#remember').prop('checked', true);
    }

    $('.forgot-password').on('click', function(e) {
        e.preventDefault();
        showMessage('info', 'Для восстановления пароля обратитесь к администратору');
    });
});
