// aerOS Superadmin — i18n dictionary + mock data (function () { const TR = { appName: 'aerOS', appSub: 'Platform Konsolu', role: 'Süperadmin', nav_platform: 'Platform', nav_management: 'Yönetim', overview: 'Genel Bakış', orgs: 'Organizasyonlar', createOrg: 'Yeni Organizasyon', billing: 'Plan & Faturalama', activity: 'Etkinlik Günlüğü', // login loginTitle: 'Platform Konsolu', loginSub: 'Süperadmin erişimi gerekli', email: 'E-posta', password: 'Şifre', signIn: 'Giriş yap', signingIn: 'Doğrulanıyor…', loginHint: 'Demo: herhangi bir e-posta/şifre ile giriş yapın', loginError: 'Yetkilendirme başarısız. Süperadmin değilsiniz.', // overview totalOrgs: 'Toplam Otel', active: 'Aktif', suspended: 'Askıda', totalOrders: 'Toplam Sipariş', totalRevenue: 'Platform Cirosu', mrr: 'Aylık Gelir (MRR)', growthTitle: 'Platform Büyümesi', growthSub: 'Son 12 ay · yeni organizasyon + ciro', planDist: 'Plan Dağılımı', verticalDist: 'Dikey Dağılımı', recentOrgs: 'Son Eklenenler', ordersTrend: 'Sipariş Hacmi', last12: 'Son 12 ay', last30: 'Son 30 gün', last7: 'Son 7 gün', // orgs orgsTitle: 'Organizasyonlar', orgsSub: 'Tüm kiracıları tek panelden yönetin', searchOrg: 'Ad veya slug ara…', name: 'Ad', slug: 'Slug', vertical: 'Dikey', plan: 'Plan', status: 'Durum', created: 'Oluşturma', usage: 'Kullanım', actions: 'İşlemler', rooms: 'Oda', products: 'Ürün', all: 'Tümü', hotel: 'Otel', hospital: 'Hastane', restaurant: 'Restoran', // create createTitle: 'Yeni Organizasyon Oluştur', createSub: 'Otel + ilk yönetici hesabı', step_org: 'Organizasyon', step_brand: 'Marka', step_admin: 'Yönetici', orgName: 'Organizasyon adı', orgSlug: 'Slug (URL)', planTier: 'Plan kademesi', defaultCurrency: 'Varsayılan para birimi', defaultLang: 'Varsayılan dil', primaryColor: 'Kurumsal renk', adminLogin: 'Yönetici kullanıcı adı', adminMail: 'Yönetici e-postası', adminPass: 'Geçici şifre', create: 'Oluştur', cancel: 'Vazgeç', next: 'İleri', back: 'Geri', slugHint: 'Sadece küçük harf, rakam ve tire', orgCreated: 'Organizasyon oluşturuldu', orgCreatedMsg: 'tenant aktif edildi.', // actions suspend: 'Askıya al', activate: 'Aktifleştir', changePlan: 'Plan değiştir', impersonate: 'Panele gir', viewDetail: 'Detay', openMenu: 'Misafir menüsü', suspendConfirm: 'Organizasyonu askıya al', suspendMsg: 'askıya alınacak. Misafir menüsü ve panel erişimi durur. Devam edilsin mi?', activateConfirm: 'Organizasyonu aktifleştir', activateMsg: 'yeniden aktif edilecek. Devam edilsin mi?', planChanged: 'Plan güncellendi', statusChanged: 'Durum güncellendi', // impersonate banner imperBanner: 'Süperadmin olarak', imperAs: 'oteline giriş yaptınız', imperReturn: 'Süperadmin\'e dön', impersonated: 'Otel paneline giriş yapıldı', impersonatedMsg: 'oturumu açıldı. Üstteki banner ile geri dönebilirsiniz.', // detail orgDetail: 'Organizasyon Detayı', subscription: 'Abonelik', limits: 'Limitler', overview2: 'Özet', monthlyOrders: 'Aylık sipariş', monthlyRevenue: 'Aylık ciro', avgBasket: 'Ort. sepet', // billing billingTitle: 'Plan & Faturalama', billingSub: 'Plan tanımları, limitler ve abonelikler', planDefs: 'Plan Tanımları', maxRooms: 'Maks. oda', maxProducts: 'Maks. ürün', price: 'Fiyat', perMonth: '/ay', subscribers: 'Abone', editPlan: 'Planı düzenle', activeSubs: 'Aktif abonelik', planName: 'Plan adı', tier: 'Kademe', save: 'Kaydet', mostPopular: 'En popüler', features: 'Özellikler', // common today: 'Bugün', logout: 'Çıkış', loading: 'Yükleniyor…', retry: 'Tekrar dene', }; const EN = { appName: 'aerOS', appSub: 'Platform Console', role: 'Superadmin', nav_platform: 'Platform', nav_management: 'Management', overview: 'Overview', orgs: 'Organizations', createOrg: 'New Organization', billing: 'Plans & Billing', activity: 'Activity Log', loginTitle: 'Platform Console', loginSub: 'Superadmin access required', email: 'Email', password: 'Password', signIn: 'Sign in', signingIn: 'Verifying…', loginHint: 'Demo: sign in with any email/password', loginError: 'Authorization failed. Not a superadmin.', totalOrgs: 'Total Hotels', active: 'Active', suspended: 'Suspended', totalOrders: 'Total Orders', totalRevenue: 'Platform Revenue', mrr: 'Monthly Revenue (MRR)', growthTitle: 'Platform Growth', growthSub: 'Last 12 months · new orgs + revenue', planDist: 'Plan Distribution', verticalDist: 'Vertical Mix', recentOrgs: 'Recently Added', ordersTrend: 'Order Volume', last12: 'Last 12 months', last30: 'Last 30 days', last7: 'Last 7 days', orgsTitle: 'Organizations', orgsSub: 'Manage every tenant from one console', searchOrg: 'Search name or slug…', name: 'Name', slug: 'Slug', vertical: 'Vertical', plan: 'Plan', status: 'Status', created: 'Created', usage: 'Usage', actions: 'Actions', rooms: 'Rooms', products: 'Products', all: 'All', hotel: 'Hotel', hospital: 'Hospital', restaurant: 'Restaurant', createTitle: 'Create Organization', createSub: 'Hotel + first admin account', step_org: 'Organization', step_brand: 'Brand', step_admin: 'Admin', orgName: 'Organization name', orgSlug: 'Slug (URL)', planTier: 'Plan tier', defaultCurrency: 'Default currency', defaultLang: 'Default language', primaryColor: 'Brand color', adminLogin: 'Admin username', adminMail: 'Admin email', adminPass: 'Temporary password', create: 'Create', cancel: 'Cancel', next: 'Next', back: 'Back', slugHint: 'Lowercase, digits and hyphens only', orgCreated: 'Organization created', orgCreatedMsg: 'tenant activated.', suspend: 'Suspend', activate: 'Activate', changePlan: 'Change plan', impersonate: 'Open panel', viewDetail: 'Details', openMenu: 'Guest menu', suspendConfirm: 'Suspend organization', suspendMsg: 'will be suspended. Guest menu and panel access stop. Continue?', activateConfirm: 'Activate organization', activateMsg: 'will be reactivated. Continue?', planChanged: 'Plan updated', statusChanged: 'Status updated', imperBanner: 'Signed in as superadmin into', imperAs: '', imperReturn: 'Return to superadmin', impersonated: 'Entered tenant panel', impersonatedMsg: 'session opened. Use the banner to return.', orgDetail: 'Organization Detail', subscription: 'Subscription', limits: 'Limits', overview2: 'Summary', monthlyOrders: 'Monthly orders', monthlyRevenue: 'Monthly revenue', avgBasket: 'Avg. basket', billingTitle: 'Plans & Billing', billingSub: 'Plan definitions, limits and subscriptions', planDefs: 'Plan Definitions', maxRooms: 'Max rooms', maxProducts: 'Max products', price: 'Price', perMonth: '/mo', subscribers: 'Subscribers', editPlan: 'Edit plan', activeSubs: 'Active subscriptions', planName: 'Plan name', tier: 'Tier', save: 'Save', mostPopular: 'Most popular', features: 'Features', today: 'Today', logout: 'Sign out', loading: 'Loading…', retry: 'Retry', }; const PLANS = [ { tier: 'starter', name: 'Starter', maxRooms: 40, maxProducts: 120, price: 49, subs: 38, features: ['1 outlet', 'QR menü', 'Temel raporlar'] }, { tier: 'growth', name: 'Growth', maxRooms: 150, maxProducts: 500, price: 149, subs: 64, popular: true, features: ['5 outlet', 'Mutfak ekranı', 'Otel modülleri', 'Gelişmiş rapor'] }, { tier: 'scale', name: 'Scale', maxRooms: 400, maxProducts: 1500, price: 349, subs: 27, features: ['Sınırsız outlet', 'Çoklu otel', 'API erişimi', 'Öncelikli destek'] }, { tier: 'enterprise', name: 'Enterprise', maxRooms: 9999, maxProducts: 9999, price: 0, subs: 9, features: ['Özel SLA', 'SSO', 'Özel entegrasyon', 'Hesap yöneticisi'] }, ]; const cities = ['İstanbul', 'Bodrum', 'Antalya', 'İzmir', 'Ankara', 'Çeşme', 'Kapadokya', 'Bursa', 'Fethiye', 'Trabzon']; const names = [ ['Radisson Collection Vadistanbul', 'radisson-vadistanbul', 'hotel', 'scale', true], ['Park Inn Pendik', 'park-inn-pendik', 'hotel', 'growth', true], ['Lumière Bodrum Resort', 'lumiere-bodrum', 'hotel', 'scale', true], ['Mandarin Cove Çeşme', 'mandarin-cove', 'hotel', 'growth', true], ['Anatolia City Hospital', 'anatolia-hospital', 'hospital', 'enterprise', true], ['Olea Bistro Group', 'olea-bistro', 'restaurant', 'starter', true], ['Marin Bay Antalya', 'marin-bay', 'hotel', 'growth', true], ['The Loft İzmir', 'the-loft-izmir', 'restaurant', 'starter', false], ['Cappadocia Cave Suites', 'cappadocia-cave', 'hotel', 'growth', true], ['Vista Medical Center', 'vista-medical', 'hospital', 'scale', true], ['Saffron Restaurant', 'saffron', 'restaurant', 'starter', true], ['Aegean Pearl Fethiye', 'aegean-pearl', 'hotel', 'growth', false], ['Bosphorus Grand', 'bosphorus-grand', 'hotel', 'scale', true], ['Nova Suites Ankara', 'nova-suites', 'hotel', 'starter', true], ['Terra Garden Bursa', 'terra-garden', 'hotel', 'growth', true], ['Blue Lagoon Resort', 'blue-lagoon', 'hotel', 'growth', true], ['Meze & Co.', 'meze-co', 'restaurant', 'starter', true], ['Hilltop Spa Hotel', 'hilltop-spa', 'hotel', 'growth', false], ['Pera Palas Dining', 'pera-dining', 'restaurant', 'growth', true], ['Karadeniz Sahil Otel', 'karadeniz-sahil', 'hotel', 'starter', true], ]; function seed(i) { let x = Math.sin(i * 99.13) * 10000; return x - Math.floor(x); } const ORGS = names.map((n, i) => { const planMax = PLANS.find(p => p.tier === n[3]); const roomsUsed = Math.round(seed(i) * planMax.maxRooms * 0.85) + 3; const prodUsed = Math.round(seed(i + 50) * planMax.maxProducts * 0.7) + 10; const orders = Math.round(seed(i + 7) * 4200) + 180; const rev = Math.round((seed(i + 3) * 480 + 40) * 1000); const yr = 2025, mo = Math.floor(seed(i + 11) * 12) + 1, day = Math.floor(seed(i + 13) * 27) + 1; return { id: 'org_' + (1000 + i), name: n[0], slug: n[1], vertical: n[2], plan_tier: n[3], is_active: n[4], created_at: `${yr}-${String(mo).padStart(2, '0')}-${String(day).padStart(2, '0')}`, rooms_used: roomsUsed, rooms_max: planMax.maxRooms, products_used: prodUsed, products_max: planMax.maxProducts, monthly_orders: orders, monthly_revenue: rev, avg_basket: Math.round(rev / orders), currency: '₺', primary_color: ['#6E9F2A', '#2563eb', '#0d9488', '#b45309', '#7c3aed', '#be123c'][i % 6], city: cities[i % cities.length], spark: Array.from({ length: 12 }, (_, m) => Math.round(seed(i * 3 + m) * 100 + 20)), }; }); // platform-wide 12-month growth const MONTHS = ['Tem', 'Ağu', 'Eyl', 'Eki', 'Kas', 'Ara', 'Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz']; const GROWTH_ORGS = [4, 6, 7, 9, 11, 12, 14, 15, 16, 18, 19, 20]; const GROWTH_REV = [62, 78, 95, 110, 128, 145, 168, 182, 205, 232, 268, 312]; // in thousands const ORDERS_30 = Array.from({ length: 30 }, (_, i) => Math.round(Math.abs(Math.sin(i * 0.6)) * 900 + 600 + seed(i) * 400)); window.SA_DATA = { TR, EN, PLANS, ORGS, MONTHS, GROWTH_ORGS, GROWTH_REV, ORDERS_30 }; })();