/**
 * Users list
 * 
 * Contains a list of users
 * 
 * @author Pierre HUBERT
 */

/**
 * User class - contains information about a single user
 */
class User {
	constructor(info){
		this.virtualDirectory = info.virtualDirectory;
		this.image = info.accountImage;
		this.firstName = info.firstName;
		this.lastName = info.lastName;
		this.isOpen = info.openPage == "true";
		this.isPublic = info.publicPage == "true";
		this.id = info.userID;
		this.customEmojis = info.customEmojis;
	}

	/**
	 * Backward compatibility
	 */
	get userID() {
		return this.id
	}

	/**
	 * Get the full name of the user
	 */
	get fullName() {
		return this.firstName + " " + this.lastName;
	}

	/**
	 * Check out whether a given user has a virtual directory or not
	 */
	get hasVirtualDirectory() {
		return this.virtualDirectory;
	}
}

class UsersList {

	/**
	 * Initialize a list of users using the legacy users system
	 * 
	 * @param {Users} list The list of users to add
	 */
	constructor(list){
		
		/**
		 * @type {User[]}
		 */
		this.list = [];
		
		for (const num in list) {
			if (list.hasOwnProperty(num)) {
				this.list.push(new User(list[num]));
				
			}
		}
	}


	/**
	 * Find and returns a user specified by its ID
	 * 
	 * @param {Number} id The ID of the user to get
	 * @return {User} target user / null in case of failure
	 */
	get(id){
		for (const num in this.list) {
			if (this.list.hasOwnProperty(num)) {
				const user = this.list[num];
				
				if(user.id == id)
					return user;
			}
		}
	}
}