/*-
 * ============LICENSE_START=======================================================
 * SDC
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */

'use strict';

export enum UserRole {
    ADMIN,
    DESIGNER,
    TESTER,
    GOVERNOR,
    OPS
}

export interface IUserManager {
    isInEditMode:boolean;
    filterTerm:string;
}

export interface IUserProperties extends IUserManager {
    firstName:string;
    lastName:string;
    userId:string;
    email:string;
    role:string;
    tempRole:string;
    lastLoginTime:string;
    status:string;
}

export interface IUser {
    userInfo:IUserProperties;
    getRole():UserRole;
    getRoleToView():string;
    getName():string;
    getFirstName():string;
    getLastName():string;
}

export class User implements IUser {

    constructor(public userInfo:IUserProperties) {
    }

    public getLastName = () => {
        return this.userInfo.lastName;
    };

    public getFirstName = () => {
        return this.userInfo.firstName;
    };

    public getName = () => {
        return this.userInfo.firstName + ' ' + this.userInfo.lastName;
    };

    public getLastLogin = () => {
        if (!this.userInfo.lastLoginTime || this.userInfo.lastLoginTime === "0") {
            return "";
        } else {
            return this.userInfo.lastLoginTime;
        }
    };

    public getRole = ():UserRole => {
        let role:UserRole;
        switch (UserRole[this.userInfo.role.toUpperCase()]) {
            case UserRole.ADMIN:
                role = UserRole.ADMIN;
                break;
            case UserRole.DESIGNER:
                role = UserRole.DESIGNER;
                break;
            case UserRole.TESTER:
                role = UserRole.TESTER;
                break;
            case UserRole.GOVERNOR:
                role = UserRole.GOVERNOR;
                break;
            case UserRole.OPS:
                role = UserRole.OPS;
                break;
        }
        return role;
    };

    public getRoleToView = ():string => {
        let role:string = this.userInfo.role.toLowerCase().replace('governor', 'governance_Rep');
        return role.charAt(0).toUpperCase() + role.slice(1).replace('_', ' ');
    }
}