import { apiSlice } from "./baseApi";
import { PaymentVerificationResponse } from "@/types/api";

const paymentApi = apiSlice.injectEndpoints({
  endpoints: (builder) => ({
    createPaymentOrder: builder.mutation<
      {
        success: boolean;
        orderId: string;
        amount: number;
        currency: string;
        key: string;
      },
      {
        amount: number;
        registrationId: number;
        notes?: Record<string, string | number | boolean>;
      }
    >({
      query: (orderData) => ({
        url: "/api/payment/create-order",
        method: "POST",
        body: orderData,
      }),
    }),

    verifyPayment: builder.mutation<
      PaymentVerificationResponse,
      {
        razorpay_order_id: string;
        razorpay_payment_id: string;
        razorpay_signature: string;
      }
    >({
      query: (verificationData) => ({
        url: "/api/payment/verify",
        method: "POST",
        body: verificationData,
      }),
      invalidatesTags: ["Registration"],
    }),

    cancelPaymentOrder: builder.mutation<
      {
        success: boolean;
        message: string;
      },
      {
        razorpay_order_id: string;
      }
    >({
      query: (payload) => ({
        url: "/api/payment/cancel-order",
        method: "POST",
        body: payload,
      }),
    }),

    getMyPayments: builder.query<
      {
        success: boolean;
        data: Array<{
          id: number;
          amount: number;
          status: string;
          razorpayOrderId: string;
          razorpayPaymentId?: string;
          createdAt: string;
          registration: {
            id: number;
            registrant1: string;
            mahayagPlace: string;
          };
        }>;
      },
      void
    >({
      query: () => ({
        url: "/api/payment/my-payments",
        method: "GET",
      }),
    }),
  }),
});

export const {
  useCreatePaymentOrderMutation,
  useVerifyPaymentMutation,
  useCancelPaymentOrderMutation,
  useGetMyPaymentsQuery,
} = paymentApi;
