import { deliverQueue } from "@/queue/queues.js";
import { URL } from "node:url";
import define from "../../../define.js";

export const meta = {
	tags: ["admin"],

	requireCredential: true,
	requireModerator: true,

	res: {
		type: "array",
		optional: false,
		nullable: false,
		items: {
			type: "array",
			optional: false,
			nullable: false,
			items: {
				anyOf: [
					{
						type: "string",
					},
					{
						type: "number",
					},
				],
			},
		},
		example: [["example.com", 12]],
	},
} as const;

export const paramDef = {
	type: "object",
	properties: {},
	required: [],
} as const;

export default define(meta, paramDef, async (ps) => {
	const jobs = await deliverQueue.getJobs(["delayed"]);

	const res = [] as [string, number][];

	for (const job of jobs) {
		const host = new URL(job.data.to).host;
		if (res.find((x) => x[0] === host)) {
			res.find((x) => x[0] === host)![1]++;
		} else {
			res.push([host, 1]);
		}
	}

	res.sort((a, b) => b[1] - a[1]);

	return res;
});
