import streams from "./stream-config.json";
import { NatsClientService } from './index';
import { NatsStreamConfig } from './nats-stream-config.js';

const nc = new NatsClientService({
    streams: streams as NatsStreamConfig[],
    servers: 'nats://localhost:4222',
});

nc.subscribeToEventMessage('mainEv', 'nc-app').subscribe({
    next: (eventMessage) => {
        console.log(
            `EVENT: [${eventMessage.subject}] ${JSON.stringify(eventMessage.data)}`,
        );
    },
});

nc.subscribeToRequestMessage('mainReq', 'nc-app').subscribe({
    next: (requestMessage) => {
        console.log(
            `REQUEST: [${requestMessage.subject}] ${JSON.stringify(requestMessage.data)}`,
        );
        requestMessage.respond(JSON.stringify({ y: 'ok' }));
    },
});

nc.dequeueData<{ key: number }>('main', 'js').subscribe({
    next: (data) => {
        console.log(`EVENT subscription 1: [js] ${JSON.stringify(data)}`);
    },
});

nc.dequeueData<{ key: number }>('main', 'js').subscribe({
    next: (data) => {
        console.log(`EVENT subscription 2: [js] ${JSON.stringify(data)}`);
    },
});

nc.dequeueData<{ key: number }>('main', '*').subscribe({
    next: (data) => {
        console.log(`EVENT subscription 1: [*] ${JSON.stringify(data)}`);
    },
});

nc.dequeueData<{ key: number }>('main', 'xs').subscribe({
    next: (data) => {
        console.log(`EVENT subscription 1: [xs] ${JSON.stringify(data)}`);
    },
});
