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

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

export async function getAntennas() {
	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;
		}
	}
});
