(function( $ ) {
    'use strict';

    // QSS Login
    let form = $('.login-form'),
        loader = $('.loader-wrapper'),
        message = $('.message'),
        logout = $('.button-logout'),
        token = sessionStorage.getItem('token');

    // Check if token exists
    if (token) {
        form.hide();
        message.html('You are still logged in successfully, Q person!');
        logout.fadeIn();
    }

    form.submit(function(e) {
        e.preventDefault();
        let email = $('#email').val(),
            password = $('#password').val();

        // validate user input
        if (!email || !password) {
            console.error('Email and password are required.');
            message.html('Please enter your email and password.');
            return;
        }

        $.ajax({
            url: 'https://symfony-skeleton.q-tests.com/api/v2/token',
            type: 'POST',
            data: JSON.stringify({ email: email, password: password }),
            dataType: 'json',
            contentType: 'application/json',
            beforeSend: function(){
                loader.fadeIn();
            },
            success: function(response) {
                // store token in session for one day
                let token = response.token,
                    expiresAt = new Date().getTime() + (24 * 60 * 60 * 1000);
                sessionStorage.setItem('token', token);
                sessionStorage.setItem('expiresAt', expiresAt);
                loader.fadeOut();
                form.hide();
                message.html('Logged in successful, welcome Q person!');
                logout.fadeIn();
            },
            error: function(xhr, status, error) {
                console.error(error);
                loader.fadeOut();
                message.html('Connection failed, try different credentials.');
            }
        });
    });

    logout.click(function() {
        sessionStorage.removeItem('token');
        message.html('You have been logged out.');
        logout.hide();
        form.fadeIn();
        setTimeout(function() {
            message.html('');
        }, 3000);
    });

})( jQuery );
