"use client"; import React, { useMemo, useState } from "react"; import { ArrowPathIcon, XMarkIcon } from "@heroicons/react/24/outline"; import { simActionsService } from "@/features/subscriptions/services/sim-actions.service"; type SimKind = "physical" | "esim"; interface ReissueSimModalProps { subscriptionId: number; currentSimType: SimKind; onClose: () => void; onSuccess: () => void; onError: (message: string) => void; } const IMPORTANT_POINTS: string[] = [ "The reissue request cannot be reversed.", "Service to the existing SIM will be terminated with immediate effect.", "A fee of 1,500 yen + tax will be incurred.", "For physical SIM: allow approximately 3-5 business days for shipping.", "For eSIM: activation typically completes within 30-60 minutes after processing.", ]; const EID_HELP = "Enter the 32-digit EID (numbers only). Leave blank to reuse Freebit's generated EID."; export function ReissueSimModal({ subscriptionId, currentSimType, onClose, onSuccess, onError, }: ReissueSimModalProps) { const [selectedSimType, setSelectedSimType] = useState(currentSimType); const [newEid, setNewEid] = useState(""); const [submitting, setSubmitting] = useState(false); const [validationError, setValidationError] = useState(null); const isEsimSelected = selectedSimType === "esim"; const isPhysicalSelected = selectedSimType === "physical"; const disableSubmit = useMemo(() => { if (isPhysicalSelected) { return false; // Allow click to show guidance message } if (!isEsimSelected) { return true; } if (!newEid) { return false; // Optional – backend supports auto EID } return !/^\d{32}$/.test(newEid.trim()); }, [isPhysicalSelected, isEsimSelected, newEid]); const handleSubmit = async () => { if (isPhysicalSelected) { setValidationError( "Physical SIM reissue cannot be requested online yet. Please contact support for assistance." ); return; } if (isEsimSelected && newEid && !/^\d{32}$/.test(newEid.trim())) { setValidationError("EID must be 32 digits."); return; } setValidationError(null); setSubmitting(true); try { await simActionsService.reissueEsim(String(subscriptionId), { newEid: newEid.trim() || undefined, }); onSuccess(); } catch (error: unknown) { const message = error instanceof Error ? error.message : "Failed to submit reissue request"; onError(message); } finally { setSubmitting(false); } }; return (
); }