import React, { useState, useEffect, useRef } from 'react'; import { Activity, Cpu, Zap, Bot, Settings, Download, Wifi, WifiOff, Terminal, Plus, Trash2, Play, CheckCircle, Send, Code, FileCode, Sparkles, Server, RefreshCw, Layers, Check, Smartphone, Info, Sun, Moon } from 'lucide-react'; // Mock initial nodes for workflow builder const INITIAL_WORKFLOW_STEPS = [ { id: '1', type: 'trigger', label: 'Webhook Diterima', icon: 'zap', desc: 'Menerima payload dari external API' }, { id: '2', type: 'action', label: 'Ekstraksi Cerdas AI', icon: 'bot', desc: 'AIRA AI menganalisis isi pesan' }, { id: '3', type: 'action', label: 'Simpan ke Database', icon: 'server', desc: 'Menyimpan log & analytics' } ]; const PRESET_STEPS = [ { id: 'p1', type: 'action', label: 'Kirim Pesan WhatsApp', icon: 'send', desc: 'Mengirimkan notifikasi instan' }, { id: 'p2', type: 'action', label: 'Kirim Email Notifikasi', icon: 'mail', desc: 'Kirim via SMTP server AIRA' }, { id: 'p3', type: 'action', label: 'Format Payload JSON', icon: 'code', desc: 'Transformasi struktur data' }, { id: 'p4', type: 'action', label: 'Filter Kondisi', icon: 'layers', desc: 'Logika IF/ELSE instan' }, ]; export default function App() { const [activeTab, setActiveTab] = useState('dashboard'); const [offlineMode, setOfflineMode] = useState(false); const [isInstalled, setIsInstalled] = useState(false); const [showNotification, setShowNotification] = useState(false); const [notificationMsg, setNotificationMsg] = useState(''); const [isDarkMode, setIsDarkMode] = useState(false); // Default false = Light Mode // Dashboard states const [cpuUsage, setCpuUsage] = useState(32); const [ramUsage, setRamUsage] = useState(48); const [tasksCompleted, setTasksCompleted] = useState(1420); const [activeAgents, setActiveAgents] = useState(12); // Workflow Builder states const [workflow, setWorkflow] = useState(INITIAL_WORKFLOW_STEPS); const [isRunning, setIsRunning] = useState(false); const [runningStepIdx, setRunningStepIdx] = useState(-1); // Chatbot states const [chatInput, setChatInput] = useState(''); const [chatMessages, setChatMessages] = useState([ { id: '1', sender: 'aira', text: 'Halo! Saya AIRA (Aplikasi Pintar, Responsif, dan Adaptif). Ada alur otomatisasi yang bisa saya bantu buat hari ini?' } ]); const [isTyping, setIsTyping] = useState(false); const chatEndRef = useRef(null); // Copy States for Dev Center const [copiedFile, setCopiedFile] = useState(null); useEffect(() => { const interval = setInterval(() => { if (!offlineMode) { setCpuUsage(prev => { const delta = Math.floor(Math.random() * 15) - 7; return Math.max(10, Math.min(95, prev + delta)); }); setRamUsage(prev => { const delta = Math.floor(Math.random() * 5) - 2; return Math.max(30, Math.min(85, prev + delta)); }); if (Math.random() > 0.6) { setTasksCompleted(prev => prev + 1); } } }, 2000); return () => clearInterval(interval); }, [offlineMode]); useEffect(() => { chatEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [chatMessages]); const triggerToast = (msg) => { setNotificationMsg(msg); setShowNotification(true); setTimeout(() => setShowNotification(false), 3000); }; // Workflow runner simulation const runWorkflowSimulation = async () => { if (workflow.length === 0) { triggerToast('Tambahkan minimal 1 langkah otomatisasi!'); return; } setIsRunning(true); for (let i = 0; i < workflow.length; i++) { setRunningStepIdx(i); await new Promise(resolve => setTimeout(resolve, 1500)); } setRunningStepIdx(-1); setIsRunning(false); setTasksCompleted(prev => prev + 1); triggerToast('Otomatisasi Alur Berhasil Dieksekusi!'); }; const addWorkflowStep = (preset) => { const newStep = { id: Date.now().toString(), type: preset.type, label: preset.label, icon: preset.icon, desc: preset.desc }; setWorkflow([...workflow, newStep]); triggerToast(`Ditambahkan: ${preset.label}`); }; const removeWorkflowStep = (id) => { setWorkflow(workflow.filter(step => step.id !== id)); }; // AI Assistant trigger response const handleSendMessage = () => { if (!chatInput.trim()) return; const userMsg = { id: Date.now().toString(), sender: 'user', text: chatInput }; setChatMessages(prev => [...prev, userMsg]); setChatInput(''); setIsTyping(true); setTimeout(() => { let aiResponseText = 'Maaf, saya sedang mempelajari modul itu. Coba tanyakan tentang "buat otomatisasi WhatsApp" atau "cek status sistem".'; const prompt = userMsg.text.toLowerCase(); if (prompt.includes('status') || prompt.includes('sistem') || prompt.includes('health')) { aiResponseText = `Kondisi AIRA saat ini sangat prima: CPU ${cpuUsage}%, Memori ${ramUsage}%, dan total ${tasksCompleted} tugas automasi telah diproses dengan lancar.`; } else if (prompt.includes('whatsapp') || prompt.includes('wa') || prompt.includes('otomatisasi')) { aiResponseText = 'Tentu! Saya bisa mengintegrasikan pemicu (trigger) Webhook ke aksi pengiriman WhatsApp instan. Anda bisa menambahkan preset "Kirim Pesan WhatsApp" pada tab Otomatisasi.'; } else if (prompt.includes('pwa') || prompt.includes('install')) { aiResponseText = 'AIRA mendukung PWA secara penuh! Aplikasi ini dapat diinstal di Google Chrome Anda, responsif di handphone, dan bisa bekerja secara offline berkat Service Worker pintar kami.'; } setChatMessages(prev => [...prev, { id: (Date.now() + 1).toString(), sender: 'aira', text: aiResponseText }]); setIsTyping(false); }, 1200); }; // PWA Mock install const handleMockInstall = () => { setIsInstalled(true); triggerToast('AIRA Terinstal Sukses di Desktop Anda!'); }; // Code copier helper const copyToClipboard = (text, fileName) => { navigator.clipboard.writeText(text); setCopiedFile(fileName); triggerToast(`${fileName} berhasil disalin!`); setTimeout(() => setCopiedFile(null), 2000); }; const manifestCode = `{ "short_name": "AIRA", "name": "AIRA - Aplikasi Pintar, Responsif, Adaptif", "icons": [ { "src": "icons/icon-192.png", "type": "image/png", "sizes": "192x192" }, { "src": "icons/icon-512.png", "type": "image/png", "sizes": "512x512" } ], "start_url": "/", "background_color": "#f8fafc", "theme_color": "#4f46e5", "display": "standalone", "orientation": "portrait-primary" }`; const serviceWorkerCode = `const CACHE_NAME = 'aira-v1'; const ASSETS = [ '/', '/index.html', '/styles.css', '/app.js', '/icons/icon-192.png' ]; self.addEventListener('install', (e) => { e.waitUntil( caches.open(CACHE_NAME).then((cache) => { return cache.addAll(ASSETS); }) ); }); self.addEventListener('fetch', (e) => { e.respondWith( caches.match(e.request).then((cachedResponse) => { return cachedResponse || fetch(e.request); }) ); });`; const themeStyles = { wrapper: isDarkMode ? "bg-slate-950 text-slate-100" : "bg-slate-50 text-slate-800", sidebar: isDarkMode ? "bg-slate-900 border-slate-800" : "bg-white border-slate-200", header: isDarkMode ? "border-slate-900 bg-slate-900/40" : "border-slate-200 bg-white/80", card: isDarkMode ? "bg-slate-900/80 border-slate-800/80" : "bg-white border-slate-200 shadow-sm", nestedBg: isDarkMode ? "bg-slate-950/40 border-slate-800/50" : "bg-slate-100/80 border-slate-200/60", subtleText: isDarkMode ? "text-slate-400" : "text-slate-600", brandText: isDarkMode ? "from-white to-slate-400" : "from-slate-900 to-slate-600", badge: isDarkMode ? "bg-slate-800 border-slate-700 text-slate-400" : "bg-slate-100 border-slate-200 text-slate-600", buttonSec: isDarkMode ? "bg-slate-800 hover:bg-slate-700 text-slate-100 border-slate-700/60" : "bg-slate-100 hover:bg-slate-200 text-slate-700 border-slate-300/60", inputBg: isDarkMode ? "bg-slate-900 border-slate-800 text-slate-100" : "bg-white border-slate-200 text-slate-800", codeBox: isDarkMode ? "bg-slate-950" : "bg-slate-900 text-slate-100" }; return (
{/* Toast Notification */} {showNotification && (
{notificationMsg}
)} {/* Sidebar Navigation */} {/* Main Content Area */}
{/* Header bar */}
{offlineMode ? "Lokal Offline Mode" : "Cloud Terdistribusi"}
{/* Theme Toggle Button */}
{/* Install PWA Button Simulator */} {!isInstalled && ( )} {isInstalled && (
Terinstal (PWA App)
)}
AR
{/* Content Tabs Switcher */}
{/* TAB: DASHBOARD */} {activeTab === 'dashboard' && (
{/* Promo Banner / Overview */}
Profil Platform

AIRA: Aplikasi Pintar, Responsif, dan Adaptif

Sistem otomatisasi performa tinggi yang memadukan keunggulan kecerdasan buatan (*Application Intelligence*) dengan proses integrasi alur kerja super cepat (*Rapid Automation*).

{/* Stats Cards */}

CPU Core Load

{cpuUsage}%

Alokasi Ram

{ramUsage}%

Job Otomatisasi

{tasksCompleted}

Seluruh alur berjalan lancar

Agen Cerdas Aktif

{activeAgents}

Model: AIRA GPT-v4 Online
{/* Interactive Telemetry & Feature Grid */}
{/* Real-time Graph Box */}

Performa Node Transmisi

Statistik muatan pesan & pemrosesan otomasi

Node Utama
{/* Simulated SVG Graphic Bar */}
{[40, 52, 38, 65, 80, 48, 70, 60, 55, 90, 85, 62, 77, 88, 95].map((val, idx) => (
{`T${idx + 1}`}
))}
Responsivitas Rata-rata: 12ms Kepatuhan SLA: 99.98%
{/* Quick Info Box */}

Arsitektur Responsif

Mengapa menggunakan PWA? Aplikasi berbasis PWA menjamin AIRA selalu berjalan dalam performa puncak di segala sistem operasi, ringan, dan mandiri tanpa perlu resource besar.

  • Instalasi Instan & Ringan (<5 MB)
  • Dukungan Kerja Offline Tanpa Koneksi
  • Push Notifications & Integrasi Sistem
)} {/* TAB: WORKFLOW */} {activeTab === 'workflow' && (

Rapid Automation Builder

Eksperimen menyusun langkah otomatisasi secara cepat dan lihat rantai eksekusi berjalan.

{/* Node Presets Picker */}

Preset Aksi Otomatisasi

Klik salah satu preset di bawah untuk menambahkan ke alur eksekusi AIRA:

{PRESET_STEPS.map((preset) => ( ))}
{/* Workflow Workspace */}

Rantai Otomatisasi Terpasang

{/* Nodes Visual List */}
{workflow.map((step, idx) => (
{/* Connection Line */} {idx < workflow.length - 1 && (
)}
{/* Icon Indicator */}
{step.icon === 'zap' && } {step.icon === 'bot' && } {step.icon === 'server' && } {step.icon === 'send' && } {step.icon === 'code' && } {step.icon === 'layers' && } {step.icon === 'mail' && }
STEP 0{idx + 1} {step.type}

{step.label}

{step.desc}

{/* Remove / Status Button */} {runningStepIdx === idx ? ( Memproses... ) : ( )}
))} {workflow.length === 0 && (

Rantai otomatisasi kosong.

Gunakan preset aksi di samping kiri untuk merancang alur kerja.

)}
AIRA Rapid Builder mengotomatisasi API, database, & pesan dengan penanganan cerdas.
)} {/* TAB: AI CHAT */} {activeTab === 'ai-chat' && (
{/* Chat Header */}

AIRA Artificial Intelligence

Sistem Cerdas Aktif

Model: GPT-v4
{/* Chat Messages */}
{chatMessages.map((msg) => (
{msg.text}
))} {isTyping && (
)}
{/* Chat Input */}
setChatInput(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleSendMessage()} placeholder="Tanya AIRA: 'status sistem' atau 'bantu buat otomatisasi whatsapp'..." className={`flex-1 px-4 py-3 rounded-xl text-xs placeholder-slate-400 focus:outline-none focus:border-indigo-500 transition-all ${themeStyles.inputBg}`} />
)} {/* TAB: PWA DEV CENTER */} {activeTab === 'pwa-dev' && (

PWA Configuration Center

Semua dokumen konfigurasi esensial untuk mengaktifkan instalasi PWA AIRA di Google Chrome.

Lolos Audit Lighthouse
{/* PWA Best Practices Guides & Config Files */}
{/* Manifest Codebox */}
manifest.json
{manifestCode}
Menyediakan metadata konfigurasi sehingga browser Chrome mengenali website AIRA sebagai aplikasi desktop mandiri.
{/* Service Worker Codebox */}
service-worker.js
{serviceWorkerCode}
Service Worker pintar yang mengamankan caching aset statis agar aplikasi AIRA termuat secepat kilat (Rapid) meski koneksi offline.
{/* Register Script & Best Practices Instruction */}

Cara Registrasi di File Utama (index.html / app.js)

Salin dan masukkan potongan kode javascript ini di bagian akhir tag <script> index.html Anda untuk menyalakan mode PWA secara resmi:

{`if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js')
      .then(reg => console.log('AIRA Service Worker Sukses Terdaftar!', reg))
      .catch(err => console.log('Registrasi SW gagal: ', err));
  });
}`}
)}
); }