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

export interface InvoiceSettings {
  id?: string;
  company?: {
    id?: string;
    name?: string;
    country?: { id?: string; name?: string };
    state?: { id?: string; name?: string };
    city?: { id?: string; name?: string };
    area?: { id?: string; name?: string };
    gstNumber?: string;
    address?: string;
    pincode?:  number;
  };
  invoicePrefix?: string;
  startNumber?: string;
  termsAndConditions?: string;
  updatedBy?: { id?: string };
}

interface InvoiceSettingsResponse {
  code: number;
  message: string;
  success: boolean;
  data: {
    results: InvoiceSettings[];
    page: number;
    limit: number;
    totalPages: number;
    totalResults: number;
  };
}

interface UpsertInvoiceSettingsResponse {
  code: number;
  message: string;
  success: boolean;
  data: InvoiceSettings;
}

export type GetInvoiceSettingsParams = {
  company: string;
  populate?: string;
  page?: number;
  limit?: number;
};

export const invoiceSettingsApi = apiSlice.injectEndpoints({
  endpoints: (builder) => ({
    getInvoiceSettings: builder.query<
      InvoiceSettingsResponse,
      GetInvoiceSettingsParams
    >({
      query: (params) => ({
        url: `${URLS.INVOICE_SETTINGS}?${generateQueryString(
          params as Record<string, unknown>,
        )}`,
        method: 'GET',
      }),
      providesTags: ['InvoiceSettings'],
    }),

    upsertInvoiceSettings: builder.mutation<
      UpsertInvoiceSettingsResponse,
      Partial<InvoiceSettings>
    >({
      query: (body) => ({
        url: `${URLS.INVOICE_SETTINGS}`,
        method: 'POST',
        body,
      }),
      invalidatesTags: ['InvoiceSettings'],
    }),
  }),
  overrideExisting: false,
});

export const {
  useGetInvoiceSettingsQuery,
  useUpsertInvoiceSettingsMutation,
} = invoiceSettingsApi;
