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

export interface Rules {
  [key: string]: boolean;
}

export interface RulesResponse {
  code: number;
  message: string;
  data: {
    companyId?: {
      id: string;
    };
    rules?: Rules;
    id?: string;
    see_all_leads?: boolean;
    see_all_contacts?: boolean;
    see_all_customers?: boolean;
    edit_property_details?: boolean;
    transfer_leads?: boolean;
    edit_project_details?: boolean;
    edit_customer_details?: boolean;
    access_customer_docs?: boolean;
    [key: string]: unknown;
  };
  success: boolean;
}

export interface UpdateRulesBody {
  rules: Rules;
}

export const rulesApi = apiSlice.injectEndpoints({
  endpoints: (builder) => ({
    getRules: builder.query<RulesResponse, { companyId: string; key?: string }>(
      {
        query: (params) => ({
          url: `${URLS.RULES}?${generateQueryString(
            params as Record<string, unknown>
          )}`,
          method: "GET",
        }),
        providesTags: ["Rules"],
      }
    ),

    updateRules: builder.mutation<
      RulesResponse,
      { companyId: string; rules: Rules }
    >({
      query: ({ companyId, rules }) => ({
        url: `${URLS.RULES}/${companyId}`,
        method: "PATCH",
        body: { rules },
      }),
      invalidatesTags: ["Rules"],
    }),
  }),
});

export const { useGetRulesQuery, useUpdateRulesMutation } = rulesApi;
