import { baseApi } from "./baseApi";
import { API_ENDPOINTS } from "./constant";
import {
  INotificationListResponse,
  INotificationUnreadCountResponse,
} from "./types/notification";

export interface INotificationListParams {
  page?: number;
  perPage?: number;
}

export const notificationApi = baseApi.injectEndpoints({
  endpoints: (builder) => ({
    getNotificationList: builder.query<
      INotificationListResponse,
      INotificationListParams | void
    >({
      query: (params) => ({
        url: API_ENDPOINTS.notificationList,
        method: "GET",
        params: {
          page: 1,
          perPage: 30,
          ...params,
        },
      }),
      providesTags: ["Notification"],
    }),
    getNotificationUnreadCount: builder.query<
      INotificationUnreadCountResponse,
      void
    >({
      query: () => ({
        url: API_ENDPOINTS.notificationUnreadCount,
        method: "GET",
      }),
      providesTags: ["Notification"],
    }),
    markNotificationRead: builder.mutation<unknown, number>({
      query: (id) => ({
        url: `${API_ENDPOINTS.notificationLog}/${id}/read`,
        method: "PATCH",
      }),
      invalidatesTags: ["Notification"],
    }),
  }),
});

export const {
  useGetNotificationListQuery,
  useGetNotificationUnreadCountQuery,
  useMarkNotificationReadMutation,
} = notificationApi;
