const PaymentManager = { init() { this.initializeOmise(); this.setupEventListeners(); }, async initializeOmise() { // ในแอพจริง โหลด Omise.js // const script = document.createElement('script'); // script.src = 'https://cdn.omise.co/omise.js'; // document.head.appendChild(script); }, setupEventListeners() { // จัดการ event สำหรับฟอร์มชำระเงิน document.addEventListener('submit', async (e) => { if (e.target.matches('#paymentForm')) { e.preventDefault(); await this.handlePaymentSubmit(e.target); } }); // จัดการ event การปิด modal document.addEventListener('click', (e) => { if (e.target.matches('.modal-close')) { const modal = e.target.closest('.modal'); if (modal) { modal.remove(); // ยกเลิกการนับถอยหลัง if (this.paymentTimer) { clearInterval(this.paymentTimer); } } } }); }, async handlePaymentSubmit(form) { try { Utils.showLoading(); const formData = new FormData(form); const paymentMethod = formData.get('paymentMethod'); // สร้างข้อมูล order const order = { items: CartManager.getCartItems(), total: CartManager.getCartTotal().total, paymentMethod, customer: { name: formData.get('name'), email: formData.get('email'), phone: formData.get('phone'), address: formData.get('address') } }; // ดำเนินการชำระเงิน const paymentResult = await this.processPayment(order); if (paymentResult.success) { // แสดง modal การชำระเงิน this.showPaymentModal(paymentResult); // เคลียร์ตะกร้า CartManager.clearCart(); // ปิด modal ชำระเงิน document.querySelector('#checkoutModal')?.remove(); } } catch (error) { console.error('Payment error:', error); NotificationManager.showError(error.message || 'เกิดข้อผิดพลาดในการชำระเงิน'); } finally { Utils.hideLoading(); } }, async processPayment(order) { try { switch (order.paymentMethod) { case 'promptpay': return await this.processPromptPay(order); case 'credit_card': return await this.processCreditCard(order); case 'banking': return await this.processBankTransfer(order); default: throw new Error('วิธีการชำระเงินไม่ถูกต้อง'); } } catch (error) { console.error('Payment processing error:', error); throw error; } }, async processPromptPay(order) { try { // สร้าง QR Code const qrCode = await this.generatePromptPayQR(order.total); const reference = Utils.generateId(); return { success: true, method: 'promptpay', data: { qrCode, amount: order.total, reference, orderDetails: order } }; } catch (error) { throw new Error('ไม่สามารถสร้าง PromptPay QR Code ได้'); } }, async processCreditCard(order) { // TODO: Implement credit card processing throw new Error('ยังไม่รองรับการชำระเงินด้วยบัตรเครดิต'); }, async processBankTransfer(order) { // TODO: Implement bank transfer processing throw new Error('ยังไม่รองรับการชำระเงินด้วยการโอนเงิน'); }, showPaymentModal(paymentResult) { const modal = document.createElement('div'); modal.className = 'modal payment-modal active'; const { method, data } = paymentResult; const content = this.createPaymentContent(method, data); modal.innerHTML = ` `; document.body.appendChild(modal); // เริ่มนับเวลาถอยหลัง if (method === 'promptpay') { this.startPaymentTimer(15 * 60); // 15 นาที } }, createPaymentContent(method, data) { switch (method) { case 'promptpay': return `
PromptPay QR Code

ยอดชำระ

${Utils.formatPrice(data.amount)}

เลขอ้างอิง: ${data.reference}

กรุณาชำระเงินภายใน

15:00

วิธีการชำระเงิน

  1. เปิดแอพธนาคารที่รองรับ PromptPay
  2. เลือกสแกน QR Code
  3. ตรวจสอบยอดเงินและกดยืนยันการชำระเงิน
  4. เก็บหลักฐานการโอนเงินไว้
`; // TODO: เพิ่ม case อื่นๆ สำหรับวิธีการชำระเงินอื่น default: return `
ไม่พบวิธีการชำระเงินที่เลือก
`; } }, startPaymentTimer(duration) { let timer = duration; const display = document.getElementById('paymentTimer'); // ยกเลิก timer เก่า (ถ้ามี) if (this.paymentTimer) { clearInterval(this.paymentTimer); } this.paymentTimer = setInterval(() => { const minutes = parseInt(timer / 60, 10); const seconds = parseInt(timer % 60, 10); if (display) { display.textContent = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; // เพิ่ม class เมื่อเวลาน้อย if (timer <= 60) { // 1 นาทีสุดท้าย display.classList.add('timer-warning'); } } if (--timer < 0) { clearInterval(this.paymentTimer); this.handlePaymentTimeout(); } }, 1000); }, handlePaymentTimeout() { NotificationManager.showError('หมดเวลาชำระเงิน กรุณาทำรายการใหม่'); document.querySelector('.payment-modal')?.remove(); } };