import React, { useState, useEffect } from 'react';
import { initializeApp } from 'firebase/app';
import { getAuth, signInAnonymously, signInWithCustomToken, onAuthStateChanged } from 'firebase/auth';
import { getFirestore, collection, doc, onSnapshot, setDoc, deleteDoc } from 'firebase/firestore';
import {
BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer,
LineChart, Line, AreaChart, Area, Cell, PieChart, Pie, Legend
} from 'recharts';
import {
LayoutDashboard, Globe, TrendingUp, DollarSign, ShoppingCart,
Activity, RefreshCw, Plus, Trash2, ExternalLink, Filter,
ChevronDown, Search, ArrowUpRight, Zap, Target, MousePointer2,
Clock, X, Trophy, BarChart3, ListOrdered, Settings2, Monitor
} from 'lucide-react';
// Firebase Config
const firebaseConfig = JSON.parse(__firebase_config);
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const db = getFirestore(app);
const appId = typeof __app_id !== 'undefined' ? __app_id : 'socialstardom-enterprise';
export default function App() {
const [user, setUser] = useState(null);
const [sites, setSites] = useState([]);
const [siteData, setSiteData] = useState({});
const [activeSiteId, setActiveSiteId] = useState('all');
const [loading, setLoading] = useState(false);
const [view, setView] = useState('overview'); // 'overview' | 'leaderboard' | 'network'
const [isModalOpen, setIsModalOpen] = useState(false);
const [newSite, setNewSite] = useState({ name: '', url: '', apiKey: '' });
// 1. Strict Authentication Flow
useEffect(() => {
const initAuth = async () => {
try {
if (typeof __initial_auth_token !== 'undefined' && __initial_auth_token) {
await signInWithCustomToken(auth, __initial_auth_token);
} else {
await signInAnonymously(auth);
}
} catch (err) {
console.error("Authentication failed:", err);
}
};
initAuth();
const unsubscribe = onAuthStateChanged(auth, (u) => {
setUser(u);
});
return () => unsubscribe();
}, []);
// 2. Secured Firestore Listener
useEffect(() => {
if (!user) return;
const sitesCollection = collection(db, 'artifacts', appId, 'public', 'data', 'sites');
const unsubscribe = onSnapshot(sitesCollection,
(snapshot) => {
setSites(snapshot.docs.map(d => ({ id: d.id, ...d.data() })));
},
(error) => {
console.error("Firestore snapshot error:", error);
}
);
return () => unsubscribe();
}, [user]);
const refreshData = async () => {
if (!user || sites.length === 0) return;
setLoading(true);
const results = { ...siteData };
for (const site of sites) {
try {
const res = await fetch(`${site.url}?key=${site.apiKey}`);
if (!res.ok) throw new Error("Fetch failed");
results[site.id] = await res.json();
} catch (e) {
results[site.id] = { error: true, site_name: site.name };
}
}
setSiteData(results);
setLoading(false);
};
useEffect(() => {
if (sites.length > 0) refreshData();
}, [sites]);
const totals = Object.values(siteData).reduce((acc, curr) => {
if (curr.stats) {
acc.rev += parseFloat(curr.stats.total_revenue || 0);
acc.paytm += parseFloat(curr.stats.paytm_revenue || 0);
acc.orders += parseInt(curr.stats.total_orders || 0);
acc.traffic += parseInt(curr.journey?.funnel?.users || 0);
}
return acc;
}, { rev: 0, paytm: 0, orders: 0, traffic: 0 });
// Leaderboard Calculation
const leaderboardData = sites.map(site => {
const data = siteData[site.id];
return {
id: site.id,
name: site.name,
revenue: parseFloat(data?.stats?.total_revenue || 0),
orders: parseInt(data?.stats?.total_orders || 0),
conversion: parseFloat(data?.analytics?.conversion?.replace('%', '') || 0),
status: data?.error ? 'Offline' : (data ? 'Online' : 'Pending')
};
}).sort((a, b) => b.revenue - a.revenue);
if (!user) return (
Establishing Secure Connection...
);
const currentData = activeSiteId === 'all' ? null : siteData[activeSiteId];
return (
{/* Vertical Sidebar */}
{/* Main Area */}
{/* Top Header Bar */}
{view === 'overview' && (
{/* KPI Grid */}
} color="bg-indigo-600" trend="+14.2%" />
} color="bg-emerald-600" trend="+8.5%" />
} color="bg-rose-600" trend="+12.1%" />
} color="bg-amber-600" trend="+22.0%" />
{/* Main Analytics Row */}
Revenue Dynamics
Real-time Financial Flow
Attribution Analysis
{['#4f46e5', '#10b981', '#f59e0b', '#ef4444'].map((c, i) => | )}
{(currentData?.attribution || [{source: 'Organic', orders: 40}, {source: 'Google Ads', orders: 30}, {source: 'Social', orders: 20}, {source: 'Direct', orders: 10}]).map((attr, idx) => (
))}
Top Converting Keywords
{['buy smm inr paytm', 'cheap followers india', 'youtube views india', 'instagram panel inr'].map((k, i) => (
))}
)}
{view === 'leaderboard' && (
Site Leaderboard
Real-time performance ranking across your network.
{leaderboardData.map((item, index) => (
{/* Rank Badge */}
#{index + 1}
{item.name}
{index === 0 && }
{item.status}
{item.orders} Orders
Conversion
{item.conversion}%
Total Revenue
₹{item.revenue.toLocaleString('en-IN')}
))}
)}
{view === 'network' && (
{sites.map(site => (
{site.name}
{site.url}
{siteData[site.id]?.error ? 'Service Interrupted' : 'Secure Connection'}
))}
)}
{/* Modern Modal Integration */}
{isModalOpen && (
Expand Network
Configure New Integration
)}
);
}
function SidebarItem({ active, icon, label, onClick }) {
return (
);
}
function KPICard({ title, value, icon, color, trend }) {
return (
);
}
function FunnelStep({ label, value, percent, active }) {
return (
{label}
{value}
{percent}
);
}
function InputField({ label, placeholder, type = "text", value, onChange }) {
return (
onChange(e.target.value)}
/>
);
}
const handleDeleteSite = async (id) => {
const sitesCollection = collection(db, 'artifacts', appId, 'public', 'data', 'sites');
await deleteDoc(doc(sitesCollection, id));
};