/*
    Mock data for testing your LightDM theme in the browser
*/
if (!('lightdm' in window)) {
    window.lightdm = {};
    lightdm.hostname ="test-host";
    lightdm.languages = [
        {
            code: "en_US",
            name: "English(US)",
            territory: "USA"
        },
        {
            code: "en_UK",
            name: "English(UK)",
            territory: "UK"
        }
    ];
    lightdm.default_language = lightdm.languages[0];
    lightdm.layouts = [
        {
            name: "test",
            short_description: "test description",
            short_description:"really long epic description"
        }
    ];
    lightdm.default_layout = lightdm.layouts[0];
    lightdm.layout = lightdm.layouts[0];
    lightdm.sessions = [
        {
            key: "fluxbox",
            name: "Fluxbox",
            comment: "no comment"
        },
        {
            key: "lubuntu",
            name: "Lubuntu",
            comment: "no comment"
        },
        {
            key: "openbox",
            name: "Openbox",
            comment: "no comment"
        },
        {
            key: "weston",
            name: "Weston",
            comment: "no comment"
        }
    ];

    lightdm.default_session = lightdm.sessions[0];
    lightdm.authentication_user = null;
    lightdm.is_authenticated = false;
    lightdm.in_authentication = false;
    lightdm.can_suspend = true;
    lightdm.can_hibernate = true;
    lightdm.can_restart = true;
    lightdm.can_shutdown = true;

    lightdm.users = [
        {
            name: "clarkk",
            real_name: "Superman",
            display_name: "Clark Kent",
            image: "http://uk.omg.li/VDXV/1756295270.jpg.x160.jpg",
            language: "en_US",
            layout: null,
            session: null,
            logged_in: false
        },
        {
            name: "brucew",
            real_name: "Batman",
            display_name: "Bruce Wayne",
            image: "http://uk.omg.li/VDHr/OW-blog-Batman.jpg",
            language: "en_US",
            layout: null,
            session: null,
            logged_in: false
        },
        {
            name: "peterp",
            real_name:"Spiderman",
            display_name: "Peter Parker",
            image: "",
            language: "en_US",
            layout: null,
            session: null,
            logged_in: true
        }
    ];

    lightdm.num_users = lightdm.users.length;
    lightdm.timed_login_delay = 0; // increase to simulate timed_login_delay
    lightdm.timed_login_user =
        lightdm.timed_login_delay > 0 ? lightdm.users[0] : null;

    lightdm.get_str = function () {};
    lightdm.get_string_property = function () {};
    lightdm.get_integer_property = function () {};
    lightdm.get_boolean_property = function () {};
    lightdm.cancel_timed_login = function () {
        _lightdm_mock_check_argument_length(arguments, 0);

        lightdm._timed_login_cancelled= true;
    };

    lightdm.respond = lightdm.provide_secret = function (secret) {
        if (typeof lightdm._username == 'undefined' || !lightdm._username) {
            throw "must call start_authentication first"
        }
        _lightdm_mock_check_argument_length(arguments, 1);

        var user = _lightdm_mock_get_user(lightdm._username);

        // That's right, passwords are the same as the username's!
        if (user && secret == lightdm._username) {
            lightdm.is_authenticated = true;
            lightdm.authentication_user = user;
        } else {
            lightdm.is_authenticated = false;
            lightdm.authentication_user = null;
            lightdm._username = null;
        }

        lightdm.in_authentication = false;
        authentication_complete();
    };

    lightdm.authenticate = lightdm.start_authentication = function (username) {
        _lightdm_mock_check_argument_length(arguments, 1);

        if (lightdm._username) {
            throw "Already authenticating!";
        }
        lightdm.in_authentication = true;
        var user = _lightdm_mock_get_user(username);
        if (!user) {
            show_error(username + " is an invalid user");
        }
        show_prompt("Password: ", "password");
        lightdm._username = username;
    };

    lightdm.cancel_authentication = function () {
        _lightdm_mock_check_argument_length(arguments, 0);

        if (!lightdm._username) {
            throw "we are not authenticating";
        }
        lightdm._username = null;
        lightdm.in_authentication = false;
    };

    lightdm.suspend = function () {
        alert("System Suspended. Bye Bye");
        document.location.reload(true);
    };

    lightdm.hibernate = function () {
        alert("System Hibernated. Bye Bye");
        document.location.reload(true);
    };

    lightdm.restart = function () {
        alert("System restart. Bye Bye");
        document.location.reload(true);
    };

    lightdm.shutdown = function () {
        alert("System Shutdown. Bye Bye");
        document.location.reload(true);
    };

    lightdm.start_session_sync = function (session) {
        _lightdm_mock_check_argument_length(arguments, 1);

        if (!lightdm.is_authenticated) {
            throw "The system is not authenticated";
        }

        alert("logged in successfully!!");
        document.location.reload(true);
    };

    lightdm.login = function (user, session) {
        _lightdm_mock_check_argument_length(arguments, 2);

        if (!lightdm.is_authenticated) {
            throw "The system is not authenticated";
        }
        if (user !== lightdm.authentication_user) {
            throw "this user is not authenticated";
        }

        alert("logged in successfully!!");
        document.location.reload(true);
    };

    if (lightdm.timed_login_delay > 0) {
        setTimeout(
            function () {
                if (!lightdm._timed_login_cancelled()) timed_login();
            },
            lightdm.timed_login_delay
        );
    }
}
// Helper functions
var _lightdm_mock_check_argument_length = function (args, length) {
    if (args.length != length) {
        throw "incorrect number of arguments in function call";
    }
}

var _lightdm_mock_get_user = function (username) {
    var user = null;
    for (var i = 0; i < lightdm.users.length; ++i) {
        if (lightdm.users[i].name == username) {
            user= lightdm.users[i];
            break;
        }
    }
    return user;
}
