"use client";

import { useMemo } from "react";
import { usePublicAddons } from "@/hooks/useAddons";
import { usePublicPlans } from "@/hooks/usePlans";
import { findPlanBySlug } from "@/lib/planDisplay";
import { useCheckoutStore } from "@/store/checkoutStore";
import { buildQuoteFromStore } from "@/utils/commercialCalculator";

export function useCheckoutQuote() {
  const state = useCheckoutStore();
  const { data: plans = [], isLoading: plansLoading } = usePublicPlans();
  const { data: addons = [], isLoading: addonsLoading } = usePublicAddons();

  const selectedPlan = useMemo(
    () => findPlanBySlug(plans, state.subscriptionSlug),
    [plans, state.subscriptionSlug],
  );

  const quote = useMemo(
    () =>
      buildQuoteFromStore({
        appFormatId: state.appFormatId,
        developmentModuleIds: state.developmentModuleIds,
        optionalAddonIds: state.optionalAddonIds,
        subscriptionSlug: state.subscriptionSlug,
        billingCycle: state.billingCycle,
        includeStrategicPlanning: state.includeStrategicPlanning,
        discovery: state.discovery,
        couponCode: state.form.couponCode,
        catalogPlans: plans,
        catalogAddons: addons,
      }),
    [
      state.appFormatId,
      state.developmentModuleIds,
      state.optionalAddonIds,
      state.subscriptionSlug,
      state.billingCycle,
      state.includeStrategicPlanning,
      state.discovery,
      state.form.couponCode,
      plans,
      addons,
    ],
  );

  return {
    quote,
    plans,
    addons,
    selectedPlan,
    isLoading: plansLoading || addonsLoading,
  };
}
