// SW Quick Panel - Frontend JavaScript & Interactive Pricing Engine let currentDuration = '1year'; let currentSeats = 1; let pricingCache = {}; document.addEventListener('DOMContentLoaded', () => { initDurationTabs(); initSeatSlider(); initFaqAccordion(); initContactForm(); initOrderForm(); initMobileMenu(); updateAllPrices(); }); // --- SÜRE DEĞİŞTİRME SEKMELERİ --- function initDurationTabs() { const tabs = document.querySelectorAll('.duration-tab'); tabs.forEach(tab => { tab.addEventListener('click', () => { tabs.forEach(t => { t.classList.remove('active', 'bg-sky-500', 'text-white', 'shadow-md'); t.classList.add('text-slate-400'); }); tab.classList.add('active', 'bg-sky-500', 'text-white', 'shadow-md'); tab.classList.remove('text-slate-400'); currentDuration = tab.getAttribute('data-duration'); updateAllPrices(); }); }); } // --- ÇOKLU BİLGİSAYAR SLIDER'I --- function initSeatSlider() { const slider = document.getElementById('seatSlider'); const badge = document.getElementById('seatBadge'); if (!slider) return; slider.addEventListener('input', (e) => { currentSeats = parseInt(e.target.value) || 1; let discText = ''; if (currentSeats >= 20) discText = ' (%20 İndirim)'; else if (currentSeats >= 10) discText = ' (%15 İndirim)'; else if (currentSeats >= 5) discText = ' (%10 İndirim)'; else if (currentSeats >= 2) discText = ' (%5 İndirim)'; badge.innerText = `${currentSeats} Bilgisayar${discText}`; updateAllPrices(); }); } // --- FİYATLARI DİNAMİK GÜNCELLEME --- async function updateAllPrices() { const cards = document.querySelectorAll('.package-card'); for (const card of cards) { const tier = card.getAttribute('data-tier'); try { const res = await fetch('/api/calculate-price', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ tier: tier, duration: currentDuration, seats: currentSeats }) }); const data = await res.json(); const priceEl = card.querySelector('.price-display'); const periodEl = card.querySelector('.period-display'); const discEl = card.querySelector('.discount-display'); if (priceEl) { priceEl.innerText = formatMoney(data.total_price) + ' ₺'; } if (periodEl) { periodEl.innerText = `${data.duration_text} / ${currentSeats} PC için`; } if (discEl) { if (data.discount_amount > 0) { discEl.innerText = `Tasarruf: ${formatMoney(data.discount_amount)} ₺ (%${data.seat_discount_percent})`; discEl.classList.remove('hidden'); } else { discEl.classList.add('hidden'); } } } catch (err) { console.error('Fiyat hesaplama hatası:', err); } } } function formatMoney(amount) { return Math.round(amount).toLocaleString('tr-TR'); } // --- SİPARİŞ MODALI --- async function openOrderModal(tier) { const modal = document.getElementById('orderModal'); document.getElementById('orderTier').value = tier; document.getElementById('orderDuration').value = currentDuration; document.getElementById('orderSeats').value = currentSeats; // Bilgileri getir try { const res = await fetch('/api/calculate-price', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ tier: tier, duration: currentDuration, seats: currentSeats }) }); const data = await res.json(); document.getElementById('modalTierText').innerText = `${tier} PAKET`; document.getElementById('modalPeriodText').innerText = `${data.duration_text} • ${currentSeats} Bilgisayar`; document.getElementById('modalPriceText').innerText = formatMoney(data.total_price) + ' ₺'; } catch(e) { console.error(e); } modal.classList.remove('hidden'); document.body.style.overflow = 'hidden'; } function closeOrderModal() { const modal = document.getElementById('orderModal'); modal.classList.add('hidden'); document.body.style.overflow = ''; } // ESC ile modal kapatma window.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeOrderModal(); }); // --- DONANIM KİMLİĞİ OTOMATİK YAPIŞTIRMA --- async function pasteHardwareId() { try { const text = await navigator.clipboard.readText(); if (text && text.trim()) { document.getElementById('orderHardwareId').value = text.trim(); showToast('Donanım Kimliği panodan başarıyla yapıştırıldı!', 'success'); } else { showToast('Panoda kopyalanmış bir metin bulunamadı.', 'error'); } } catch(err) { alert('Tarayıcı pano erişimine izin vermedi. Lütfen kopyaladığınız kodu Ctrl+V ile kutucuğa yapıştırınız.'); } } // --- SİPARİŞ FORMU GÖNDERİMİ --- function initOrderForm() { const form = document.getElementById('orderForm'); if (!form) return; form.addEventListener('submit', async (e) => { e.preventDefault(); const btn = document.getElementById('orderSubmitBtn'); btn.disabled = true; btn.innerHTML = ' Sipariş ve PDF Oluşturuluyor...'; const formData = new FormData(form); const payload = Object.fromEntries(formData.entries()); try { const res = await fetch('/api/order', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); const data = await res.json(); if (data.success) { // Başarı ekranına dönüştür const modalBody = form.parentElement; modalBody.innerHTML = `

Siparişiniz Başarıyla Alındı!

Sipariş Kodu: ${data.order_code}

Talebiniz sistemimize kaydedildi ve resmi sipariş PDF belgeniz hazırlandı. Ödemeniz teyit edildiğinde lisans anahtarınız doğrudan Müşteri Hesabınıza tanımlanacaktır.

Resmi Sipariş & Lisans Talep Belgeniz Hazır:
Resmi Sipariş PDF Formunu İndir
Siparişlerimi & Lisansımı Takip Et WhatsApp Destek
`; } else { alert('Hata: ' + data.error); btn.disabled = false; btn.innerHTML = ' Siparişi Onayla & Lisans Talebi Oluştur'; } } catch (err) { alert('Bağlantı hatası: ' + err); btn.disabled = false; btn.innerHTML = ' Siparişi Onayla & Lisans Talebi Oluştur'; } }); } // --- İLETİŞİM FORMU --- function initContactForm() { const form = document.getElementById('contactForm'); if (!form) return; form.addEventListener('submit', async (e) => { e.preventDefault(); const btn = document.getElementById('contactSubmitBtn'); btn.disabled = true; btn.innerHTML = ' Gönderiliyor...'; const formData = new FormData(form); const payload = Object.fromEntries(formData.entries()); try { const res = await fetch('/api/contact', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); const data = await res.json(); if (data.success) { showToast(data.message, 'success'); form.reset(); } else { showToast('Hata: ' + data.error, 'error'); } } catch(err) { showToast('Mesaj gönderilemedi: ' + err, 'error'); } finally { btn.disabled = false; btn.innerHTML = ' Mesajı Gönder'; } }); } // --- FAQ ACCORDION --- function initFaqAccordion() { const items = document.querySelectorAll('.faq-item'); items.forEach(item => { const btn = item.querySelector('.faq-btn'); const content = item.querySelector('.faq-content'); const icon = btn.querySelector('i'); btn.addEventListener('click', () => { const isOpen = !content.classList.contains('hidden'); // Hepsini kapat document.querySelectorAll('.faq-content').forEach(c => c.classList.add('hidden')); document.querySelectorAll('.faq-btn i').forEach(i => i.classList.remove('rotate-180')); if (!isOpen) { content.classList.remove('hidden'); icon.classList.add('rotate-180'); } }); }); } // --- MOBİL MENÜ --- function initMobileMenu() { const btn = document.getElementById('mobileMenuBtn'); const menu = document.getElementById('mobileMenu'); if (!btn || !menu) return; btn.addEventListener('click', () => { menu.classList.toggle('hidden'); }); menu.querySelectorAll('a').forEach(link => { link.addEventListener('click', () => menu.classList.add('hidden')); }); } // --- TOAST BİLDİRİMİ --- function showToast(message, type = 'success') { const toast = document.getElementById('toast'); if (!toast) return; const bgClass = type === 'success' ? 'bg-emerald-600 text-white' : 'bg-red-600 text-white'; const icon = type === 'success' ? 'fa-circle-check' : 'fa-triangle-exclamation'; toast.className = `fixed top-24 right-6 z-50 p-4 rounded-xl shadow-2xl flex items-center gap-3 text-xs font-semibold ${bgClass} transform translate-x-0 opacity-100 transition-all duration-300 pointer-events-auto`; toast.innerHTML = ` ${message}`; setTimeout(() => { toast.className = 'fixed top-24 right-6 z-50 transform translate-x-full transition-all duration-300 pointer-events-none opacity-0'; }, 4500); }