import {Message} from "./message.js"

class Channel {
	constructor(client, channel_id, members_id, messages, reload) {
		this.client = client;
		this.channel_id = channel_id;
		this.members_id = members_id;
		this.messages = [];
		if (messages != undefined)
			this.updateMessages(messages);

		this.connect(reload);
	}

	// reload = function to use when we receive a message
	async connect(reload) {
		let url = `${window.location.protocol[4] === 's' ? 'wss' : 'ws'}://${window.location.host}/ws/chat/${this.channel_id}`;

		this.chatSocket = new WebSocket(url);
		this.chatSocket.onmessage = (event) =>{
			let data = JSON.parse(event.data)

			this.messages.push(new Message(
				this.channel_id,
				data.author_id,
				data.content,
				data.time,
			));

			reload();
		};
	}

	async disconnect() {
		this.chatSocket.close();
	}

	updateMessages(messages)
	{
		messages = JSON.parse(messages);
		let new_messages = [];

		messages.forEach((message) => {
			message = message["fields"];
			new_messages.push(new Message(
				message["channel_id"],
				message["author_id"],
				message["content"],
				message["time"],
			));
		});

		//console.log(new_messages);
		this.messages = new_messages;
		return new_messages;
	}

	async sendMessageChannel(message, receivers_id) {

		if (this.chatSocket == undefined)
			return;

		this.chatSocket.send(JSON.stringify({
			'message':message,
			'receivers_id':receivers_id,
		}));
	}

	async deleteChannel() {
		let response = await this.client._delete("/api/chat/" + this.channel_id, {
		});

		let data = await response.json();
		return data;
	}

	async sendInvite() {

	}

}

export {Channel}
