(function (base) {
    'use strict';

    base.factory('userProfileService', ['$q', 'networkService', '$timeout', 'userService', function ($q, networkService, $timeout, userService) {

        function _changePassword(password) {
            var deferred = $q.defer();

            var url = '/usersettings/changepassword/';

            networkService.post(url, {password: password}).then(function () {
                deferred.resolve();
            }).catch(function () {
                deferred.reject();
            });
            return deferred.promise;
        }

        function _changeLanguagePreference(changedLanguage) {
            var deferred = $q.defer();

            var url = '/usersettings/changelanguagepreference/';

            networkService.post(url, { language: changedLanguage }).then(function () {
                deferred.resolve(changedLanguage);
            }).catch(function () {
                deferred.reject();
            });
            return deferred.promise;
        }

        function _saveUserProfile(data) {
            var deferred = $q.defer();

            var url = '/usersettings/profile/';

            networkService.post(url, data).then(function (results) {
                deferred.resolve(results);
            }).catch(function (error) {
                deferred.reject(error);
            });
            return deferred.promise;
        }

        function _getUserProfile() {
            var deferred = $q.defer();

            var url = '/usersettings/profile/';

            networkService.get(url).then(function (data) {
                deferred.resolve(data);
            }).catch(function () {
                deferred.reject();
            });

            return deferred.promise;
        }

        function _changeUserEmail(email) {


            var deferred = $q.defer();

            var url = '/usersettings/validateemail/';

            networkService.get(url, '?email=' + email).then(function (data) {
                deferred.resolve(data);
            }).catch(function () {
                deferred.reject();
            });

            return deferred.promise;
        }

        function _toggleInfoModal(hide) {
            var deferred = $q.defer();

            var url = '/usersettings/toggleOnboarding/';

            networkService.post(url).then(function (results) {
                deferred.resolve(results);
            }).catch(function (error) {
                deferred.reject(error);
            });
            return deferred.promise;
        }

        return {
            changeUserEmail: function (email) {
                return _changeUserEmail(email);
            },
            changePassword: function (password) {
                return _changePassword(password);
            },
            saveUserProfile: function (data) {
                return _saveUserProfile(data);
            },
            getUserProfile: function () {
                return _getUserProfile();
            },
            toggleInfoModal:function(){
                return _toggleInfoModal();
            },
            changeLanguagePreference: function (newLanguage) {
                return _changeLanguagePreference(newLanguage);
            },
        };
    }
    ]);
}(lmsApp));

