import { useState, useEffect } from "react"; import { Check, Loader2 } from "lucide-react"; import { Dialog, DialogContent, } from "@/components/ui/dialog"; import { useShopifyProducts } from "@/hooks/useShopifyProducts"; import { useCartStore } from "@/stores/cartStore"; import { toast } from "sonner"; const planDetails = [ { name: "Liten", kgPerWeek: "3 kg", priceWeekExclVat: "1 350", employeeRecommendation: "1–10 anställda", features: [ "3 kg kakor per vecka", "Veckoleverans", "Betala direkt eller med Klarna", ], shopifyHandle: "liten-kakabonnemang-3-kg-vecka", }, { name: "Mellan", kgPerWeek: "5 kg", priceWeekExclVat: "2 250", employeeRecommendation: "10–25 anställda", features: [ "5 kg kakor per vecka", "Veckoleverans", "Betala direkt eller med Klarna", ], shopifyHandle: "mellan-kakabonnemang-5-kg-vecka", }, { name: "Stor", kgPerWeek: "10 kg", priceWeekExclVat: "4 500", employeeRecommendation: "25+ anställda", features: [ "10 kg kakor per vecka", "Veckoleverans", "Betala direkt eller med Klarna", ], shopifyHandle: "stor-kakabonnemang-10-kg-vecka", }, ]; const PlansSection = () => { const [selectedPlan, setSelectedPlan] = useState(""); const [dialogOpen, setDialogOpen] = useState(false); const [checkoutLoading, setCheckoutLoading] = useState(false); const { products, isLoading: productsLoading } = useShopifyProducts("product_type:Abonnemang"); const { addItem, getCheckoutUrl, isLoading: cartLoading } = useCartStore(); const handleSelectPlan = async (plan: typeof planDetails[0]) => { // Find the matching Shopify product const shopifyProduct = products.find(p => p.node.handle === plan.shopifyHandle); if (!shopifyProduct) { toast.error("Kunde inte hitta produkten"); return; } const variant = shopifyProduct.node.variants.edges[0]?.node; if (!variant) { toast.error("Ingen variant tillgänglig"); return; } setCheckoutLoading(true); setSelectedPlan(plan.name); try { await addItem({ product: shopifyProduct, variantId: variant.id, variantTitle: variant.title, price: variant.price, quantity: 1, selectedOptions: variant.selectedOptions || [], }); // Small delay to ensure cart is created await new Promise(resolve => setTimeout(resolve, 500)); const checkoutUrl = useCartStore.getState().getCheckoutUrl(); if (checkoutUrl) { window.open(checkoutUrl, '_blank'); toast.success("Omdirigerar till betalning..."); } else { toast.error("Kunde inte skapa checkout"); } } catch (error) { console.error('Checkout error:', error); toast.error("Något gick fel"); } finally { setCheckoutLoading(false); } }; const isLoading = productsLoading || cartLoading || checkoutLoading; return (
{/* Section header */}

Våra Abonnemang

Välj det abonnemang som passar ert företag bäst

{/* Plans grid */}
{planDetails.map((plan, index) => (
{/* Plan header */}

{plan.name}

Rekommenderas för {plan.employeeRecommendation}

{/* Price info */}
{plan.kgPerWeek}/vecka
{plan.priceWeekExclVat} kr/vecka exkl. moms
{/* Features */}
    {plan.features.map((feature, i) => (
  • {feature}
  • ))}
{/* CTA Button */}
))}
); }; export default PlansSection;