import { apiSlice } from "./baseApi";
import {
  RegistrationCountryType,
  RegistrationOtpRequest,
  RegistrationOtpResponse,
  VerifyRegistrationOtpRequest,
} from "@/types/api";

const formApi = apiSlice.injectEndpoints({
  endpoints: (builder) => ({
    getMahayagRates: builder.query<
      {
        success: boolean;
        data: Array<{
          id: number;
          placeName: string;
          amount: string;
        }>;
      },
      { registrationCountryType?: RegistrationCountryType } | void
    >({
      query: (params) => {
        const queryParams = new URLSearchParams();
        if (params?.registrationCountryType) {
          queryParams.append("registrationCountryType", params.registrationCountryType);
        }

        return {
          url: "/api/form/mahayag-rates",
          method: "GET",
          params: queryParams,
        };
      },
    }),

    checkPhoneExists: builder.query<
      {
        success: boolean;
        exists: boolean;
        registration?: {
          id: number;
          registrant1: string;
          registrant2?: string;
          isCouple: boolean;
          mahayagPlace: string;
          phone: string;
          createdAt: string;
        };
      },
      { phone: string; countryCode?: string }
    >({
      query: ({ phone, countryCode }) => ({
        url: `/api/form/check-phone/${phone}`,
        method: "GET",
        params: countryCode ? new URLSearchParams({ countryCode }) : undefined,
      }),
    }),

    getKaryakartaByCode: builder.query<
      {
        success: boolean;
        data: {
          karyakarta: {
            id: number;
            name: string;
            code: string;
          };
          mandal: {
            id: number;
            name: string;
          };
          pradesh: {
            id: number;
            name: string;
          };
        };
      },
      string
    >({
      query: (code) => ({
        url: `/api/form/karyakarta/${code}`,
        method: "GET",
      }),
    }),

    requestRegistrationOtp: builder.mutation<RegistrationOtpResponse, RegistrationOtpRequest>({
      query: (payload) => ({
        url: "/api/registrations/otp/request",
        method: "POST",
        body: payload,
      }),
    }),

    verifyRegistrationOtp: builder.mutation<RegistrationOtpResponse, VerifyRegistrationOtpRequest>({
      query: (payload) => ({
        url: "/api/registrations/otp/verify",
        method: "POST",
        body: payload,
      }),
    }),

    searchKaryakartaByCity: builder.query<
      Array<{
        haridhamId: string;
        karyakartaName: string;
        mandalName: string;
        pradeshName: string;
      }>,
      string
    >({
      query: (city) => ({
        url: `/api/karyakarta/search?city=${encodeURIComponent(city)}`,
        method: "GET",
      }),
    }),
  }),
});

export const {
  useGetMahayagRatesQuery,
  useCheckPhoneExistsQuery,
  useLazyCheckPhoneExistsQuery,
  useGetKaryakartaByCodeQuery,
  useLazyGetKaryakartaByCodeQuery,
  useRequestRegistrationOtpMutation,
  useVerifyRegistrationOtpMutation,
  useSearchKaryakartaByCityQuery,
  useLazySearchKaryakartaByCityQuery,
} = formApi;
