'use server';

import { executeServerAction } from '@/lib/api/execute-server-action';

const API_URL = process.env.NEXT_PUBLIC_API_URL;

/**
 * 권한 메뉴 목록에서 menuId → URL 매핑 조회
 *
 * 사이드바 메뉴에 없지만 권한 시스템에 등록된 메뉴(기준정보 관리, 공정관리 등)의
 * URL 매핑을 보완하기 위해 사용.
 */
export async function getPermissionMenuUrlMap(): Promise<Record<string, string>> {
  interface MenusData { menus: Array<{ id: number; url: string }> }
  const result = await executeServerAction<MenusData>({
    url: `${API_URL}/api/v1/role-permissions/menus`,
    errorMessage: '권한 메뉴 조회에 실패했습니다.',
  });

  if (!result.success || !Array.isArray(result.data?.menus)) return {};

  const map: Record<string, string> = {};
  for (const menu of result.data.menus) {
    if (menu.id && menu.url) {
      map[String(menu.id)] = menu.url;
    }
  }
  return map;
}

/** 역할(Role) 기반 권한 매트릭스 조회 (설정 페이지와 동일 API) */
export async function getRolePermissionMatrix(roleId: number): Promise<{
  success: boolean;
  data: { permissions: Record<string, Record<string, boolean>> };
}> {
  const result = await executeServerAction<{ permissions: Record<string, Record<string, boolean>> }>({
    url: `${API_URL}/api/v1/roles/${roleId}/permissions/matrix`,
    errorMessage: '권한 매트릭스 조회에 실패했습니다.',
  });

  if (!result.success || !result.data) return { success: false, data: { permissions: {} } };
  return { success: true, data: result.data };
}
