from channels.generic.websocket import WebsocketConsumer

from .AbstractRoomMember import AbstractRoomMember

class AbstractRoom:
	
	def __init__(self, room_manager):
		self._member_list: [AbstractRoomMember] = [] 
		self.room_manager = room_manager

	def broadcast(self, detail: str, data: dict = {}):
		for member in self._member_list:
			member: AbstractRoomMember
			member.send(detail, data)
	
	def clear(self):
		self._member_list.clear()

	def get_member_by_socket(self, socket: WebsocketConsumer):
		for member in self._member_list:
			member: AbstractRoomMember
			if (member.socket is socket):
				return member
		return None

	def get_member_by_user_id(self, user_id: int):
		for member in self._member_list:
			member: AbstractRoomMember
			if (member.user_id == user_id):
				return member
		return None


	def append(self, member: AbstractRoomMember):
		self._member_list.append(member)
		member.accept()

	def remove(self, member: AbstractRoomMember, code: int = 1000):
		self._member_list.remove(member)
		member.disconnect(code)

	def empty(self):
		for _ in self._member_list:
			return False
		return True

	def get_users_id(self):
		return [member.user_id for member in self._member_list]

	def __len__(self):
		return len(self._member_list)
