"use client";
import SubscriptionForm from "@/components/forms/subscription-form";
import AppModal from "@/components/ui/modal";
import {
  doUpdateSubscription,
  getSubscriptionDetail,
} from "@/lib/redux/features/subscriptionsPlan";
import { useAppDispatch, useAppSelector } from "@/lib/redux/hooks";
import { ResponseStatus, SortDirection, SortField } from "@/types/common";
import { SubscriptionPlanQueryParams } from "@/types/subscriptionsPlan";
import React from "react";

type UpdateSubscriptionProps = {
  isOpenUpdateSubModal: boolean;
  handleCloseUpdateSubModal: () => void;
  setSubscriptionQuery: (params: SubscriptionPlanQueryParams) => void;
};

const UpdateSubscription = ({
  isOpenUpdateSubModal,
  handleCloseUpdateSubModal,
  setSubscriptionQuery,
}: UpdateSubscriptionProps) => {
  const dispatch = useAppDispatch();

  const subscriptionDetail = useAppSelector(getSubscriptionDetail);

  const handleSubmit = async (values) => {
    try {
      if (!subscriptionDetail?.id)
        throw new Error("Subscription ID not found!");
      console.log("values", values);
      const result = await dispatch(
        doUpdateSubscription({ ...values, id: subscriptionDetail?.id }),
      );
      const payload = result?.payload as { status: ResponseStatus };
      if (payload && payload.status === ResponseStatus.SUCCESS) {
        handleCloseUpdateSubModal();
        setSubscriptionQuery({
          pageNumber: 1,
          pageSize: 10,
          sortField: SortField.createdTime,
          sortDirection: SortDirection.DESC,
        });
      }
    } catch (error: any) {
      console.error("Failed to update subscription plan!", error?.message);
    }
  };
  return (
    <>
      <AppModal
        isOpen={isOpenUpdateSubModal}
        destroyOnClose
        handleCancel={handleCloseUpdateSubModal}
      >
        <SubscriptionForm
          subscriptionDetail={subscriptionDetail}
          handleSubmit={handleSubmit}
          handleCloseModal={handleCloseUpdateSubModal}
        />
      </AppModal>
    </>
  );
};

export default UpdateSubscription;
