import { createApi } from "@reduxjs/toolkit/query/react";
import baseQueryWithAuth from "../baseQueryWithAuth";


export const UserManagement = createApi({
  reducerPath: "UserManagement",
  baseQuery: baseQueryWithAuth,
  tagTypes: ["users"],
  endpoints: (builder) => ({
    listOfUsers: builder.query({
      query: ({
        token,
        userType,
        email,
        qualifier,
        hear_about_us,
        // Multi-select status filter - accepts comma-separated values (e.g., "active,suspended")
        status,
        startDate,
        endDate,
        name,
        page,
        limit,
      }) => {
        const params: any = {};

        if (userType) params.userType = userType;
        if (email) params.email = email;
        if (qualifier) params.qualifier = qualifier;
        if (hear_about_us) params.hear_about_us = hear_about_us;
        // Pass status filter to API - supports multiple comma-separated statuses for filtering
        if (status) params.status = status;
        if (startDate) params.startDate = startDate;
        if (endDate) params.endDate = endDate;
        if (name) params.name = name;
        if (page) params.page = page;
        if (limit) params.limit = limit;

        return {
          // url: "admin/dashboard-analytics",
          url: "admin/list-users",
          params,
          headers: {
            Authorization: `Bearer ${token}`,
          },
        };
      },
      providesTags: ["users"],
    }),
    userActiveToggle: builder.mutation({
      query: ({ userId, token }) => ({
        url: `admin/active-toggle`,
        method: "POST",
        body: JSON.stringify({ userId }),
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${token}`,
        },
      }),
      invalidatesTags: ["users"],
    }),
    userDeleteToggle: builder.mutation({
      query: ({ userId, token }) => ({
        url: `admin/delete-toggle`,
        method: "POST",
        body: JSON.stringify({ userId }),
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${token}`,
        },
      }),
      invalidatesTags: ["users"],
    }),
    platformSuspendUser: builder.mutation({
      query: ({ userId, token }: { userId: string; token: string }) => ({
        url: `admin/platform-suspend-user`,
        method: "POST",
        body: JSON.stringify({ userId }),
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${token}`,
        },
      }),
      invalidatesTags: ["users"],
    }),
    suspendUserToggle: builder.mutation({
      query: ({
        userId,
        token,
        isSuspended,
      }: {
        userId: string;
        token: string;
        isSuspended: boolean;
      }) => ({
        url: `admin/suspend-user-toggle`,
        method: "POST",
        body: JSON.stringify({ userId, isSuspended }),
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${token}`,
        },
      }),
      invalidatesTags: ["users"],
    }),
    userDetail: builder.query({
      query: ({ token, userId }) => {
        return {
          url: "admin/get-user",
          params: { userId },
          headers: {
            Authorization: `Bearer ${token}`,
          },
        };
      },
    }),

    getDashboardStatsData: builder.query({
      query: ({ token, page, limit, startDate, endDate }:{ token:string; page?:number; limit?:number; startDate?:string; endDate?:string }) => ({
        url: "admin/dashboard-analytics",
        params: {
          ...(page && { page }),
          ...(limit && { limit }),
          ...(startDate && { startDate }),
          ...(endDate && { endDate }),
        },
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
      providesTags: ["users"],
    }),

    getSingleWaiterReview: builder.query({
      query: ({ token, userId }) => {
        return {
          url: `admin/get-reviews/${userId}`,
          headers: {
            Authorization: `Bearer ${token}`,
          },
        };
      },
    }),
    getGraphData: builder.query({
      query: ({ token, fromMonth, fromYear, toMonth, toYear }:{ token:string; fromMonth?:string; fromYear?:string; toMonth?:string; toYear?:string }) => ({
        url: "admin/graph-data",
        params: {
          ...(fromMonth && { fromMonth }),
          ...(fromYear && { fromYear }),
          ...(toMonth && { toMonth }),
          ...(toYear && { toYear }),
        },
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
      providesTags: ["users"],
    }),
    updateUserProfile: builder.mutation({
      query: ({ token, userId, data }) => ({
        url: `admin/updateProfile`,
        method: "POST",
        params: { userId },
        headers: {
          Authorization: `Bearer ${token}`,
        },
        body: data,
      }),
    }),
    getUsersExcel: builder.query<
      { success: boolean; fileUrl: string },    // <-- updated return type
      { token: string; startDate?: string; endDate?: string }
    >({
      query: ({ token, startDate, endDate }) => ({
        url: "admin/get-users-excel",
        method: "GET",
        params: {
          ...(startDate && { startDate }),
          ...(endDate && { endDate })
        },
        headers: { Authorization: `Bearer ${token}` },
      }),
    }),
    getUsersCSV: builder.query<
      { success: boolean; fileUrl: string },    // <-- updated return type
      { token: string; startDate?: string; endDate?: string }
    >({
      query: ({ token, startDate, endDate }) => ({
        url: "admin/get-users-csv",
        method: "GET",
        params: {
          ...(startDate && { startDate }),
          ...(endDate && { endDate })
        },
        headers: { Authorization: `Bearer ${token}` },
      }),
    }),
    getLastActionOfUser: builder.query({
      query: ({ token, userId }) => ({
        url: `/admin/get-activity-details?userId=${userId}`,
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }),
    }),

  }),
});

export const {
  useListOfUsersQuery,
  useGetDashboardStatsDataQuery,
  useGetGraphDataQuery,
  useUserActiveToggleMutation,
  useUserDetailQuery,
  useGetSingleWaiterReviewQuery,
  useUserDeleteToggleMutation,
  usePlatformSuspendUserMutation,
  useSuspendUserToggleMutation,
  useUpdateUserProfileMutation,
  useGetUsersExcelQuery,
  useLazyGetUsersExcelQuery,
  useLazyGetUsersCSVQuery,
  useGetLastActionOfUserQuery
} = UserManagement;
