// CONFIG
var triggerPhrases = [
    "make me a sandwich",
];

var isTutorialMode = false;

function init() {
    JimmyJohns.init().then(function(){
        // success
        console.log("JimmyJohns.init() success");
        injectPushListener(); // listen for voice command
        chrome.runtime.sendMessage(chrome.runtime.id, {action: "show_page_action"}); // show icon in omnibox
        updateOrderStatus("init", "Alexa is ready to make sandwiches");
    }, function(){
        // login not set or failed
        chrome.runtime.sendMessage(chrome.runtime.id, {action: "is_first_launch"}, function(ret){
            if (ret.isFirstLaunch){
                blurPage();
                firstLaunch();
            } else {
                console.error("JimmyJohns.init() failed");
                blurPage();
                showLoginWindow();
            }
        });
    });
}

function order() {
    chrome.runtime.sendMessage(chrome.runtime.id, {action: "is_ordering_enabled"}, function(ret){
        if (ret.enabled === true) {
            JimmyJohns.orderSandwich();
        } else {
            $('#artisanLaunchLogo').addClass('artisanOrderingDemo');
            $('#artisanEnableOrdering').fadeIn();
            setTimeout(function(){
                $('#artisanLaunchLogo').removeClass('artisanOrderingDemo');
            }, 2500);
        }
    });
}

function tutorialOrderPhraseFailed(){
    $('#artisanLaunchLogo').addClass('shake');
    setTimeout(function(){
        $('#artisanLaunchLogo').removeClass('shake');
    }, 500);
}

function firstLaunch(){
    $('html').append('<div id="artisanWelcome" class="artisanDialog"></div>');
    $.get(chrome.extension.getURL('/welcome.html'), function(data) {
        $('#artisanWelcome').html(data);
          $('#artisanTermsAccepted').one('click', function(){
            $('#artisanWelcome').remove();
            showLoginWindow();
        });
    });
}

function showLoginWindow(){
    $('html').append('<div id="artisanAlexaLogin" class="artisanDialog"></div>');
    $.get(chrome.extension.getURL('/login.html'), function(data) {
        $('#artisanAlexaLogin').html(data);
        $('#artisanAlexaLogin button').on('click', function(e) {
            $('#artisanAlexaLogin button').attr('disabled', 'disabled');
            var credentials = {
                email: $('#artisanAlexaLogin input[name="email"]').val(),
                pass: $('#artisanAlexaLogin input[name="pass"]').val()
            };
            testLogin(credentials);
        });
        $("#artisanAlexaLogin input").keyup(function(event){
            if(event.keyCode == 13){
                $("#artisanAlexaLogin button").click();
            }
        });
    });
}

function testLogin(credentials){
    // reset ui from previous login trys
    $('#artisanLoginTestResult').hide().html('');
    $('#artisanJJLoginTests .success, #artisanJJLoginTests .fail').removeClass('success').removeClass('fail');

    // test credentials and show each test results if login is fine
    JimmyJohns.testLogin(credentials, function(result){
        if (result.test == "login" && result.result == "success"){
            $('#artisanJJLoginTests').show();
            $('#artisanRegisterNote').hide();
        }

        $('#artisanTest-'+result.test).addClass(result.result);
        console.info('testLogin result', result);
    }).then(function(){
        // all tests completed successfully, save login and start normal flow
        JimmyJohns.saveCredentials(credentials).then(function(){
            console.info("New credentials saved, re-initializing");
            $('#artisanLoginTestResult').css('color', 'green').html('You\'re in! Legit!').show();
            $('#artisanLaunchTutorial').show();
            $('#artisanLaunchTutorial').on('click', function(e) {
                $('#artisanAlexaLogin').remove();
                tutorial();
            });
        });
    }, function(err){
        var errHtml;
        if (err.hasOwnProperty('url') && err.hasOwnProperty('errorText')){
            errHtml = err.errorText+' - <a href="'+err.url+'" target="_blank">Open Page</a>';
        } else {
            errHtml = err;
        }
        $('#artisanLoginTestResult').css('color', 'red').html(errHtml).show();
        $('#artisanAlexaLogin button').removeAttr('disabled');
    });
}

function tutorial(){
    isTutorialMode = true;
    $('html').append('<div id="artisanTutorial" class="artisanDialog"></div>');
    $.get(chrome.extension.getURL('/tutorial.html'), function(data) {
        $('#artisanTutorial').html(data);

        // command trigger display in tutorial - locked to first phrase until more phrases are required
        $('#artisanTriggerPhrase').text('Alexa, '+triggerPhrases[0]);

        injectPushListener(); // listen for voice command

        $('#artisanEnableOrdering').on('click', function(e) {
            enableOrdering(function(){
                $('#artisanTutorial').remove();
                isTutorialMode = false;
                removeBlurPage();
                init();
            });
        });
    });
}

function enableOrdering(callback){
    chrome.runtime.sendMessage(chrome.runtime.id, {action: "enable_ordering"}, callback);
}

function updateOrderStatus(state, text){
    if (state == "init") {
        $('html').append('<div id="artisanAlexaStatusWrap"><div id="artisanStatusLogo"></div><div id="artisanAlexaStatus"></div></div>');
        $('#artisanAlexaStatus').text(text);
        setTimeout(function(){
            $('#artisanAlexaStatusWrap').fadeOut();
        }, 5000);
    } else if (state == "loading") {
        $('#artisanAlexaStatusWrap').show();
        $('#artisanAlexaStatus').text(text);
    } else if (state == "success") {
        $('#artisanAlexaStatus').addClass('success').text(text);
        setTimeout(function(){
            $('#artisanAlexaStatusWrap').fadeOut();
        }, 7500);
    }
}

function blurPage() {
    $('body').css('-webkit-filter', 'blur(2.5px)');
    $('body').prepend('<div id="overlay"></div>');
}
function removeBlurPage() {
    $('body').css('-webkit-filter', '');
    $('#overlay').fadeOut();
}

init();