// web service proxy for user
webservices.factory('userService', ['$http', 'apiConfig', 'httpCacheService', 'loginContext', function ($http, apiConfig, httpCacheService, loginContext) {
    'use strict';

    return {
        getUserList: function () {
            return $http.get('/user/display', apiConfig.create());
            //return httpCacheService.getData('/user/display');
        },
        getUserListByOrgID: function (orgID) {
            return $http.get('/user/displayByOrgID?orgId=' + orgID, apiConfig.create());
            //return httpCacheService.getData('/user/displayByOrgID?orgId=' + orgID);
        },
        getSingleUser: function (userId) {
            return $http.get('/user/displaySingle?userId=' + userId, apiConfig.create());
        },
        getUserByName: function (userName) {
            return $http.post('/user/getUserByName',
                {
                    UserName: userName
                },
                apiConfig.create());
        },
        addUser: function (user) {
            return $http.post('/user/add', user, apiConfig.create());
        },
        updateUser: function (user) {
            return $http.put('/user/update', user, apiConfig.create());
        },
        enableOrDisableUser: function (userId, updateType) {
            return $http.post('/user/enableordisableuser', {
                'UserId': userId,
                'UpdateType': updateType
            }, apiConfig.create());
        },
        getRoleTypeList: function () {
            return $http.get('/user/roleTypeList', apiConfig.create());
        },
        getRoleList: function (roleTypeId) {
            return $http.get('/user/roleList?roleTypeId=' + roleTypeId, apiConfig.create());
        },
        getRoleDisplayList: function () {
            return $http.get('/user/roleDisplayList', apiConfig.create());
        },
        getUserTreeList: function () {
            return $http.get('/user/userTreeList', apiConfig.create());
            //return httpCacheService.getData('/user/userTreeList');
        },
        getProjectListByUserId: function (userId) {
            return $http.get('/user/projectListByUserId?userId=' + userId, apiConfig.create());
        },
        addProjectToUser: function (userProjectInfo) {
            return $http.post('/user/addProjectToUser', { 'UserId': userProjectInfo.UserId, 'ProjectService': userProjectInfo.ProjectIds }, apiConfig.create());
        },
        removeProjectFromUser: function (userProjectInfo) {
            return $http.post('/user/removeProjectFromUser', { 'UserId': userProjectInfo.UserId, 'ProjectService': userProjectInfo.ProjectIds }, apiConfig.create());
        },
        getProjectRoles: function (userProjectInfo) {
            return $http.post('/user/getProjectRoles', { 'UserId': userProjectInfo.UserId, 'ProjectService': userProjectInfo.ProjectIds }, apiConfig.create());
        },
        operateProjectRole: function (userProjectInfo) {
            return $http.post('/user/operateProjectRole', {
                'UserId': userProjectInfo.UserId,
                'ProjectService': userProjectInfo.ProjectIds,
                'IsAdd': userProjectInfo.IsAdd,
                'RoleID': userProjectInfo.RoleID
            }, apiConfig.create())
        },

        setProjectUserRole: function (userRoleList) {
            return $http.post('/user/setProjectUserRole', userRoleList, apiConfig.create())
        },
        getUserRoleSetList: function (userid, serviceTypeid, projectid) {
            return $http.get('/user/getUserRoleSetList?userid=' + userid + '&serviceTypeid=' + serviceTypeid + '&projectid=' + projectid, apiConfig.create());
        },
        getUserListByProject: function (projectID, serviceTypeID) {
            return $http.get('/user/userTreeListByProject?projectID=' + projectID + '&serviceTypeID=' + serviceTypeID, apiConfig.create());
        },
        GetUserById: function (userId) {
            return $http.get('/user/getUser/' + userId, apiConfig.create());
        },
        getUserRoleByDimensionValueID: function (parentDimensionID, dimensionValueID) {
            return $http.get('/user/getUserRoleByDimensionValueID?parentDimensionID=' + parentDimensionID + '&dimensionValueID=' + dimensionValueID, apiConfig.create());
        },
        getSpecialUserRoleByDimensionValueID: function (parentDimensionID, dimensionValueID) {
            return $http.get('/user/getSpecialUserRoleByDimensionValueID?parentDimensionID=' + parentDimensionID + '&dimensionValueID=' + dimensionValueID, apiConfig.create());
        },
        updateUserRoleDimension: function (userRoleList) {
            return $http.post('/user/updateUserRoleDimension', userRoleList, apiConfig.create())
        },
        updateUserToRole: function (userRoleList) {
            return $http.post('/user/addUsersToRole', userRoleList, apiConfig.create())
        },
        getUserRoleListByUserID: function (userId) {
            return $http.get('/user/getUserRoleListByUserID?userId=' + userId, apiConfig.create());
        },
        deleteUserRoleDimension: function (userRoleList) {
            return $http.post('/user/deleteUserRoleDimension', userRoleList, apiConfig.create())
        },
        getAllUserRoleList: function (serviceTypeID) {
            return $http.get('/user/getAllUserRoleList?serviceTypeID=' + serviceTypeID, apiConfig.create());
        },
        deleteUserRoleForOrg: function (userOrgdto) {
            return $http.post('/user/deleteUserRoleForOrg', userOrgdto, apiConfig.create());
        },
        getUserRoleByOrgIDUserID: function (userID, orgID) {
            return $http.get('/user/getUserRoleByOrgIDUserID?userID=' + userID + '&orgID=' + orgID, apiConfig.create());
        },
        getUserRoleByUserID: function (userID) {
            return $http.get('/user/getUserRoleByUserID?userID=' + userID, apiConfig.create());
        },
        updateUserRoleForOrg: function (userRoleList) {
            return $http.post('/user/updateUserRoleForOrg', userRoleList, apiConfig.create())
        },
        updateUserRoleForDimension: function (userRoleList) {
            return $http.post('/user/updateUserRoleForDimension', userRoleList, apiConfig.create())
        },
        deleteUserOrg: function (userRoleList) {
            return $http.post('/user/deleteUserOrg', userRoleList, apiConfig.create())
        },
        updateUserRoleOrganization: function (userRoleList) {
            return $http.post('/user/updateUserRoleOrganization', userRoleList, apiConfig.create())
        },
        getUserPermission: function (userName) {
            return httpCacheService.get('/user/getUserPermission?userName=' + userName);
        },
        getUserPermissionNew: function (userName, fn) {
            return httpCacheService.getCache('/user/getUserPermissionKey?userName=' + userName, false, fn);
        },
        deleteUserRoleOrg: function (userRoleList) {
            return $http.post('/user/deleteUserRoleOrg', userRoleList, apiConfig.create())
        },
        getDimensionUserRoleList: function (parentDimensionID, dimensionValueID) {
            return $http.get('/user/getDimensionUserRoleList?parentDimensionID=' + parentDimensionID + '&dimensionValueID=' + dimensionValueID, apiConfig.create());
        },
        getUserOrgPermission: function (userID, orgID) {
            return $http.get('/user/getUserOrgPermission?userID=' + userID + '&orgID=' + orgID, apiConfig.create());
        },
        getUserListByPermissionCode: function (permissionCode) {
            return $http.get('/user/getUserListByPermissionCode?permissionCode=' + permissionCode, apiConfig.create());
        },
        getUserOwnerOrganization: function () {
            return $http.get('/user/getUserOwnerOrganization', apiConfig.create());
        }
    };
}]);