import { Client } from "./Client.js";

class Profile
{
	/**
	 * @param  {Client} client
	 */
	constructor (client, username=undefined, id=undefined, avatar_url=undefined)
	{
		/**
		 * @type  {Client} client
		 */
		this.client = client;
		
		/**
		 * @type {String}
		 */
		this.username = username;

		/**
		 * @type {Number}
		 */
		this.id = id;

		/**
		 * @type {String}
		 */
		this.avatar_url = avatar_url;

		/**
		 * @type {Boolean}
		 */
		this.isBlocked = false;
		this.isFriend = false;
	}

	/**
	 * 
	 * @returns {Promise<*>}
	 */
	async init()
	{
		let response;
		if (this.username !== undefined)
			response = await this.client._get(`/api/profiles/user/${this.username}`);
		else 
			response = await this.client._get(`/api/profiles/id/${this.id}`);

		if (response.status !== 200)
			return response.status;

		let response_data = await response.json();
		this.id = response_data.user_id;
		this.username = response_data.username;
		this.avatar_url = response_data.avatar;

		await this.getBlock();
		await this.getFriend();

	}

	async getBlock() {
		let block_response = await this.client._get("/api/profiles/block");
	
		if (block_response.status != 200)
			return;

		let block_data = await block_response.json();
		let block_list = JSON.parse(block_data.blockeds);
		let client_id = block_data.user_id;
		block_list.forEach(block => {
		 	let blocker = block.fields.blocker;
		 	let blocked = block.fields.blocked;
		 	if (blocker == client_id && blocked == this.id)
		 		return (this.isBlocked = true);
		});
	}

	async getFriend() {
		let friend_response = await this.client._get("/api/profiles/friend");
	
		this.isFriend = false;
		if (friend_response.status != 200)
		 	return this.isFriend;

		let friend_data = await friend_response.json();
		let friends_list = friend_data.friends;
		let client_id = friend_data.user_id;
		friends_list.forEach(friend => {
		 	if (friend == this.id) {
		 		this.isFriend = true;
		 		return this.isFriend;
			}
		});
		return this.isFriend;
	}

}

export {Profile};
