// Interfaces

export interface WhatsappTemplate {
  id: string;
  templateId: string;
  name: string;
  headerText: string | null;
  bodyText: string | null;
  whatsappStatus: string;
  status: string;
  companyId: { id: string } | string;
}

export interface Paginated<T> {
  results: T[];
  page: number;
  limit: number;
  totalPages: number;
  totalResults: number;
}

export interface ApiEnvelope<T> {
  code: number;
  message: string;
  data: T;
  success: boolean;
}

// Extend ApiEnvelope to include whatsapp property if your API returns it
export interface ApiEnvelopeWithWhatsapp<T> extends ApiEnvelope<T> {
  whatsapp?: any; // Change 'any' to your whatsapp creds type if known
}

export interface GetWhatsappTemplatesParams {
  page?: number;
  limit?: number;
  search?: string;
  companyId?: string;
}

interface AddWhatsappCredsResponse {
  code: number;
  message: string;
  success: boolean;
}

export interface GetWhatsappsResponse {
  results: TemplateCommon[];
  whatsapp?: any;
}

// RTK Query API slice

import { apiSlice } from ".";
import { generateQueryString } from "@/utils/queryStringUtil";
import URLS from "./constants";
import { TemplateCommon } from "@/components/settings/sms/TemplateCard";

export const whatsappApi = apiSlice.injectEndpoints({
  endpoints: (builder) => ({
    getWhatsapps: builder.query<
      GetWhatsappsResponse,
      GetWhatsappTemplatesParams | void
    >({
      query: (params = {}) => ({
        url: `${URLS.WHATSAPP}?${generateQueryString(
          params as Record<string, unknown>
        )}`,
        method: "GET",
      }),
      transformResponse: (response: any) => ({
        results: response.data.results,
        whatsapp: response.data.whatsapp,
      }),
      providesTags: ["Whatsapp"],
    }),
    updateStatus: builder.mutation<
      TemplateCommon,
      { id: string; status?: string; triggerPoint?: string }
    >({
      query: ({ id, ...body }) => ({
        url: `${URLS.WHATSAPP}/${id}`,
        method: "PATCH",
        body,
      }),
      invalidatesTags: ["Whatsapp"],
    }),
    addWhatsappCreds: builder.mutation<
      AddWhatsappCredsResponse,
      {
        accessToken: string;
        fbAppId: string;
        fbSecretId: string;
        phoneNumberId: string;
      }
    >({
      query: (body) => ({
        url: `${URLS.WHATSAPP}`,
        method: "PATCH",
        body,
      }),
      invalidatesTags: ["Whatsapp"],
    }),
  }),
  overrideExisting: true,
});

export const {
  useGetWhatsappsQuery,
  useUpdateStatusMutation,
  useAddWhatsappCredsMutation,
} = whatsappApi;
