import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

export const userdashboardApi = createApi({
  reducerPath: 'userdashboardApi',
  baseQuery: fetchBaseQuery({
    baseUrl: process.env.NEXT_PUBLIC_BASE_URL,
    prepareHeaders: (headers, { getState }) => {
      return headers;
    },
  }),
  endpoints: (builder) => ({
    getAllUserCampaigns: builder.query({
      query: (options) => {
        return {
          url: `campaing/userflowgetallcampaign?userId=${options?.id}&page=${options?.page}&limit=${options?.limit}`,
          headers: {
            Authorization: `Bearer ${options?.token}`,
          },
        };
      },
    }),
    getpersonalized: builder.query({
      query: (options) => {
        return {
          url: `personques/get-onboarding-questions?questionFor=${options?.userType}`,
          headers: {
            Authorization: `Bearer${options?.token}`,
          },
        };
      },
    }),

    getAllUserReports: builder.query({
      query: (options) => {
        return {
          url: `report/getallreportsofuser?page=${options?.page}&limit=${options?.limit}`,
          headers: {
            Authorization: `Bearer ${options?.token}`,
          },
        };
      },
    }),

    getUserProfileById: builder.query({
      query: (options) => {
        return {
          url: `auth/getprofilebyid`,
          headers: {
            Authorization: `Bearer ${options?.token}`,
          },
        };
      },
    }),
    EditUserProfile: builder.mutation({
      query: ({ body, token }) => ({
        url: 'auth/editprofile',
        method: 'PUT',
        body,
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
    }),

    getAllOrganization: builder.query({
      query: (options) => {
        return {
          url: `organization/getallorganization?page=${options?.page}&limit=${options?.limit}&location=${options?.location}&cause=${options?.cause}&search=${options?.search}`,
          headers: {
            Authorization: `Bearer ${options?.token}`,
          },
        };
      },
    }),

    CreateFavouriteCampaigns: builder.mutation({
      query: ({ body, token }) => ({
        url: 'campaing/createfavcampaign',
        method: 'POST',
        body,
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
    }),

    RemoveFavouriteCampaigns: builder.mutation({
      query: ({ body, token }) => ({
        url: 'campaing/unfavcampaign',
        method: 'POST',
        body,
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
    }),

    SearchByOrganization: builder.mutation({
      query: ({ body, token }) => ({
        url: 'search/searchbyorganization',
        method: 'POST',
        body,
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
    }),

    getAllFavouriteCampaigns: builder.query({
      query: (options) => {
        return {
          url: `campaing/getfavcampaing?page=${options?.page}&limit=${options?.limit}`,
          headers: {
            Authorization: `Bearer ${options?.token}`,
          },
        };
      },
    }),

     getUserReviews: builder.query({
      query: (options) => {
        return {
          url: `review/get-user-reviews?userId=${options?.id}`,
          headers: {
            Authorization: `Bearer ${options?.token}`,
          },
        };
      },
    }),

     PostReview: builder.mutation({
      query: ({ body, token }) => ({
        url: 'review/createreview',
        method: 'POST',
        body,
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
    }),
    DeleteUser: builder.mutation({
      query: ({ token }) => ({
        url: 'auth/deleteaccount',
        method: 'DELETE',
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
    }),
      getUserTransactions: builder.query({
      query: (options) => {
        return {
          url: `transactions/user-transaction-history?start=${options?.start}&end=${options?.end}`,
          headers: {
            Authorization: `Bearer ${options?.token}`,
          },
        };
      },
    }),

    getUserbagdes: builder.query({
      query: (options) => {
        return {
          url: `transactions/transaction-by-id?id=${options?.id}`,
          headers: {
            Authorization: `Bearer ${options?.token}`,
          },
        };
      },
    }),


      getUserTransactionById: builder.query({
      query: (options) => {
        return {
          url: `transactions/transaction-by-id?id=${options?.id}`,
          headers: {
            Authorization: `Bearer ${options?.token}`,
          },
        };
      },
    }),
     EditAnswers: builder.mutation({
      query: ({ body, token }) => ({
        url: 'personques/edit-answer',
        method: 'POST',
        body,
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
    }),
    CreateAnswers: builder.mutation({
      query: ({ body, token }) => ({
        url: 'personques/create-answer',
        method: 'POST',
        body,
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
    }),

     ToggleNotification: builder.mutation({
      query: ({ body, token }) => ({
        url: 'notifications/switch-notification',
        method: 'POST',
        body,
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
    }),
  }),
});

export const {
  useGetAllUserCampaignsQuery,
  useGetAllUserReportsQuery,
  useGetUserProfileByIdQuery,
  useEditUserProfileMutation,
  useGetAllOrganizationQuery,
  useCreateFavouriteCampaignsMutation,
  useRemoveFavouriteCampaignsMutation,
  useGetAllFavouriteCampaignsQuery,
  useDeleteUserMutation,
  useSearchByOrganizationMutation,
  useGetpersonalizedQuery,
  useGetUserReviewsQuery,
  usePostReviewMutation,
  useGetUserTransactionsQuery,
  useGetUserTransactionByIdQuery,
  useEditAnswersMutation,
  useCreateAnswersMutation,
  useGetUserbagdesQuery,
  useToggleNotificationMutation
} = userdashboardApi;
