"use client";
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 { ServerIcon, CalendarIcon, DocumentTextIcon } 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";
import { PageLayout } from "@/components/templates/PageLayout";
const { formatCurrency: sharedFormatCurrency } = Formatting;
import { SimManagementSection } from "@/features/sim-management";
import {
getBillingCycleLabel,
getSubscriptionStatusIcon,
getSubscriptionStatusVariant,
} from "@/features/subscriptions/utils/status-presenters";
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 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 pageError =
error || !subscription
? process.env.NODE_ENV === "development"
? error instanceof Error
? error.message
: "Subscription not found"
: "Unable to load subscription details. Please try again."
: null;
const isSimService = Boolean(subscription?.productName?.toLowerCase().includes("sim"));
return (
{formatCurrency(subscription.amount)}
{getBillingCycleLabel(subscription.cycle)}{formatDate(subscription.nextDue)}
{formatDate(subscription.registrationDate)}
Switch between billing and SIM management views