import { generateQueryString } from "@/utils/queryStringUtil";
import { apiSlice } from ".";
import URLS from "./constants";

export interface Permission {
  id: string;
  group: string;
  key: string;
  moduleName: string;
  access: string | string[];
}

export interface PermissionGroupPayload {
  group: string;
  groupAccess: string;
  permissions: {
    key: string;
    moduleName: string;
    access?: string[];
  }[];
}

interface GetPermissionsResponse {
  code: number;
  message: string;
  success: boolean;
  data: Permission[];
}

interface UpdatePermissionsResponse {
  success: boolean;
  message: string;
}

export const permissionApi = apiSlice.injectEndpoints({
  endpoints: (builder) => ({
    getPermissionsByRoleId: builder.query<GetPermissionsResponse, { roleId: string, companyType?: string }>({
      query: (params) => ({
        url: `${URLS.PERMISSIONS}?${generateQueryString(params as Record<string, unknown>)}`,
        method: "GET",
      }),
    }),

    updatePermissionsByRoleId: builder.mutation<
      UpdatePermissionsResponse,
      { roleId: string; body: PermissionGroupPayload[] }
    >({
      query: ({ roleId, body }) => ({
        url: `${URLS.PERMISSIONS}?roleId=${roleId}`,
        method: "POST",
        body,
      }),
      invalidatesTags: ["Role"],
    }),
  }),
});

export const {
  useGetPermissionsByRoleIdQuery,
  useUpdatePermissionsByRoleIdMutation,
} = permissionApi;
