import type { BaileysEventEmitter } from "baileys";
import * as handlers from "./handlers";

export class Store {
	private readonly chatHandler;
	private readonly messageHandler;
	private readonly contactHandler;
	private readonly groupMetadataHandler;

	constructor(sessionId: string, event: any) { // Use any to avoid type compatibility issues
		// Cast the event to work with both baileys and @whiskeysockets/baileys
		this.chatHandler = handlers.chatHandler(sessionId, event as any);
		this.messageHandler = handlers.messageHandler(sessionId, event as any);
		this.contactHandler = handlers.contactHandler(sessionId, event as any);
		this.groupMetadataHandler = handlers.groupMetadataHandler(sessionId, event as any);
		this.listen();
	}

	public listen() {
		this.chatHandler.listen();
		this.messageHandler.listen();
		this.contactHandler.listen();
		this.groupMetadataHandler.listen();
	}

	public unlisten() {
		this.chatHandler.unlisten();
		this.messageHandler.unlisten();
		this.contactHandler.unlisten();
		this.groupMetadataHandler.unlisten();
	}
}
