import { and, eq } from "drizzle-orm";
import type { NextFunction, Request, Response } from "express";
import { db } from "../db/db.controller.js";
import { settings } from "../db/schema/settings.schema.js";
import { tryCatch } from "../utils/trycatch.utils.js";

/**
 *
 * @param moduleName name of the module we are checking if is enabled or not.
 */
export const featureCheck = (moduleName: string) => {
	// get the features from the settings

	return async (_req: Request, res: Response, next: NextFunction) => {
		const { data: sData, error: sError } = await tryCatch(
			db
				.select()
				.from(settings)
				.where(
					and(
						eq(settings.settingType, "feature"),
						eq(settings.name, moduleName),
					),
				),
		);

		if (sError) {
			return res.status(403).json({ error: "Internal Error" });
		}

		if (!sData?.length || !sData[0]?.active) {
			return res.status(403).json({ error: "Feature disabled" });
		}

		next();
	};
};
