import axios from "axios";
import { createMiddleware } from "hono/factory";

// const hasCorrectRole = (requiredRole: string[], module: string) =>
// 	createMiddleware(async (c, next) => {
// 		/**
// 		 * We want to check to make sure you have the correct role to be here
// 		 */
// 		const authHeader = c.req.header("Authorization");

// 		if (!authHeader || !authHeader.startsWith("Bearer ")) {
// 			return c.json({ error: "Unauthorized" }, 401);
// 		}

// 		const token = authHeader.split(" ")[1];

// 		// deal with token data
// 		const { data: tokenData, error: tokenError } = await tryCatch(
// 			verify(token, process.env.JWT_SECRET!),
// 		);

// 		if (tokenError) {
// 			return c.json({ error: "Invalid token" }, 401);
// 		}

// 		const customToken = tokenData as CustomJwtPayload;

// 		// Get the module
// 		const { data: mod, error: modError } = await tryCatch(
// 			db.select().from(modules).where(eq(modules.name, module)),
// 		);
// 		if (modError) {
// 			console.log(modError);
// 			return;
// 		}

// 		if (mod.length === 0) {
// 			return c.json({ error: "You have entered an invalid module name" }, 403);
// 		}

// 		// check if the user has the role needed to get into this module
// 		const { data: userRole, error: userRoleError } = await tryCatch(
// 			db
// 				.select()
// 				.from(userRoles)
// 				.where(
// 					and(
// 						eq(userRoles.module_id, mod[0].module_id),
// 						eq(userRoles.user_id, customToken.user?.user_id!),
// 					),
// 				),
// 		);

// 		if (userRoleError) {
// 			return;
// 		}

// 		if (!userRole) {
// 			return c.json(
// 				{
// 					error:
// 						"The module you are trying to access is not active or is invalid.",
// 				},
// 				403,
// 			);
// 		}

// 		if (!requiredRole.includes(userRole[0]?.role)) {
// 			return c.json(
// 				{ error: "You do not have access to this part of the app." },
// 				403,
// 			);
// 		}

// 		await next();
// 	});

interface UserRole {
	userRoleId: string;
	userId: string;
	module: string;
	role: string;
}

const hasCorrectRole = (requiredRole: string[], module: string) =>
	createMiddleware(async (c, next) => {
		// const cookieHeader = c.req.header("Cookie");
		// if (!cookieHeader) return c.json({ error: "Unauthorized" }, 401);

		// const res = await axios.get(`${process.env.LST_BASE_URL}/api/user/roles`, {
		// 	headers: { Cookie: cookieHeader },
		// });

		// const currentRoles: UserRole[] = res.data.data;
		// const canAccess = currentRoles.some(
		// 	(r) => r.module === module && requiredRole.includes(r.role),
		// );
		// if (!canAccess) {
		// 	return c.json(
		// 		{
		// 			error: "Unauthorized",
		// 			message: `You do not have access to ${module}`,
		// 		},
		// 		400,
		// 	);
		// }

		return next();
	});

export default hasCorrectRole;
