import define from "../../define.js";
import { ApiError } from "../../error.js";
import { Apps } from "@/models/index.js";

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

	errors: {
		noSuchApp: {
			message: "No such app.",
			code: "NO_SUCH_APP",
			id: "dce83913-2dc6-4093-8a7b-71dbb11718a3",
		},
	},

	res: {
		type: "object",
		optional: false,
		nullable: false,
		ref: "App",
	},
} as const;

export const paramDef = {
	type: "object",
	properties: {
		appId: { type: "string", format: "misskey:id" },
	},
	required: ["appId"],
} as const;

export default define(meta, paramDef, async (ps, user, token) => {
	const isSecure = user != null && token == null;

	// Lookup app
	const ap = await Apps.findOneBy({ id: ps.appId });

	if (ap == null) {
		throw new ApiError(meta.errors.noSuchApp);
	}

	return await Apps.pack(ap, user, {
		detail: true,
		includeSecret: isSecure && ap.userId === user!.id,
	});
});
