"use client"; import { LoadingCard, Skeleton } from "@/components/atoms/loading-skeleton"; import { SubCard } from "@/components/molecules/SubCard/SubCard"; import { DetailHeader } from "@/components/molecules/DetailHeader/DetailHeader"; import { useEffect, useState } from "react"; import { useParams, useSearchParams } from "next/navigation"; import Link from "next/link"; import { ArrowLeftIcon, ServerIcon, CheckCircleIcon, ExclamationTriangleIcon, ClockIcon, XCircleIcon, CalendarIcon, DocumentTextIcon, ArrowTopRightOnSquareIcon, } from "@heroicons/react/24/outline"; import { format } from "date-fns"; import { useSubscription } from "@/features/subscriptions/hooks"; import { InvoicesList } from "@/features/billing/components/InvoiceList/InvoiceList"; import { Formatting } from "@customer-portal/domain/toolkit"; const { formatCurrency: sharedFormatCurrency } = Formatting; import { SimManagementSection } from "@/features/sim-management"; export function SubscriptionDetailContainer() { const params = useParams(); const searchParams = useSearchParams(); const [showInvoices, setShowInvoices] = useState(true); const [showSimManagement, setShowSimManagement] = useState(false); const subscriptionId = parseInt(params.id as string); const { data: subscription, isLoading, error } = useSubscription(subscriptionId); useEffect(() => { const updateVisibility = () => { const hash = typeof window !== "undefined" ? window.location.hash : ""; const service = (searchParams.get("service") || "").toLowerCase(); const isSimContext = hash.includes("sim-management") || service === "sim"; if (isSimContext) { setShowInvoices(false); setShowSimManagement(true); } else { setShowInvoices(true); setShowSimManagement(false); } }; updateVisibility(); if (typeof window !== "undefined") { window.addEventListener("hashchange", updateVisibility); return () => window.removeEventListener("hashchange", updateVisibility); } return; }, [searchParams]); const getStatusIcon = (status: string) => { switch (status) { case "Active": return ; case "Suspended": return ; case "Terminated": return ; case "Cancelled": return ; case "Pending": return ; default: return ; } }; const formatDate = (dateString: string | undefined) => { if (!dateString) return "N/A"; try { return format(new Date(dateString), "MMM d, yyyy"); } catch { return "Invalid date"; } }; const formatCurrency = (amount: number) => sharedFormatCurrency(amount || 0); const formatBillingLabel = (cycle: string) => { switch (cycle) { case "Monthly": return "Monthly Billing"; case "Annually": return "Annual Billing"; case "Quarterly": return "Quarterly Billing"; case "Semi-Annually": return "Semi-Annual Billing"; case "Biennially": return "Biennial Billing"; case "Triennially": return "Triennial Billing"; default: return "One-time Payment"; } }; if (isLoading) { return (
{Array.from({ length: 3 }).map((_, i) => (
))}
); } if (error || !subscription) { return (

Error loading subscription

{error instanceof Error ? error.message : "Subscription not found"}
← Back to subscriptions
); } return (

{subscription.productName}

Service ID: {subscription.serviceId}

Billing Amount

{formatCurrency(subscription.amount)}

{formatBillingLabel(subscription.cycle)}

Next Due Date

{formatDate(subscription.nextDue)}

Due date

Registration Date

{formatDate(subscription.registrationDate)}

Service created
{subscription.productName.toLowerCase().includes("sim") && (

Service Management

Switch between billing and SIM management views

SIM Management Invoices
)} {showSimManagement && (
)} {showInvoices && }
); } export default SubscriptionDetailContainer;