import { BrokerProxy } from "./BrokerProxy";

export interface EventTest {
    value: number;
    date: number;
}
export interface EventStart {
    name: string;
    date: number;
}
export class BrokerGate extends BrokerProxy {

    async connect() {
        await this.connect();
        await  broker.createChannel("test");
    }

    // Описать интерфейсы для текущей рфеализации
    send(queue: "start", msg: EventStart): boolean;
    send(queue: "test", msg: EventTest): boolean;
    send(queue: "test" | "start", msg: EventTest | EventStart) {
        return super.emit<EventTest | EventStart>(queue, msg);
    }

    addListner(queue: "start", fn: (ev: EventStart) => void): void;
    addListner(queue: "test", fn: (ev: EventTest) => void): void;
    addListner(queue: string, fn: (ev: any) => void) {
        this.on(queue).subscribe(fn as any);
    }
}
const broker = new BrokerGate({ host: "localhost" });
async () => {
  await broker.connect();
  await broker.createChannel("test");
  broker.on<EventTest>("test").subscribe((el) => {

  })
  broker.send("start", {name: "testService", date: Date.now()});

  broker.addListner("start", (ev) => {
      ev.name
  })
};
