import { URL } from "node:url";
import define from "../../../define.js";
import { addRelay } from "@/services/relay.js";
import { ApiError } from "../../../error.js";

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

	requireCredential: true,
	requireModerator: true,

	errors: {
		invalidUrl: {
			message: "Invalid URL",
			code: "INVALID_URL",
			id: "fb8c92d3-d4e5-44e7-b3d4-800d5cef8b2c",
		},
	},

	res: {
		type: "object",
		optional: false,
		nullable: false,
		properties: {
			id: {
				type: "string",
				optional: false,
				nullable: false,
				format: "id",
			},
			inbox: {
				description: "URL of the inbox, must be a https scheme URL",
				type: "string",
				optional: false,
				nullable: false,
				format: "url",
			},
			status: {
				type: "string",
				optional: false,
				nullable: false,
				default: "requesting",
				enum: ["requesting", "accepted", "rejected"],
			},
		},
	},
} as const;

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

export default define(meta, paramDef, async (ps, user) => {
	try {
		if (new URL(ps.inbox).protocol !== "https:") throw new Error("https only");
	} catch {
		throw new ApiError(meta.errors.invalidUrl);
	}

	return await addRelay(ps.inbox);
});
