import { Antennas } from '@/models/index.js';
import { Antenna } from '@/models/entities/antenna.js';
import { subscriber } from '@/db/redis.js';

let antennasFetched = false;
let antennas: Antenna[] = [];

export async function getAntennas(): Promise<Antenna[]> {
	if (!antennasFetched) {
		antennas = await Antennas.find();
		antennasFetched = true;
	}

	return antennas;
}

subscriber.on('message', async (_, data) => {
	const obj = JSON.parse(data);

	if (obj.channel === 'internal') {
		const { type, body } = obj.message;
		switch (type) {
			case 'antennaCreated':
				antennas.push(body);
				break;
			case 'antennaUpdated':
				antennas[antennas.findIndex(a => a.id === body.id)] = body;
				break;
			case 'antennaDeleted':
				antennas = antennas.filter(a => a.id !== body.id);
				break;
			default:
				break;
		}
	}
});
