import { useState } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Switch } from '@/components/ui/switch'; import { Badge } from '@/components/ui/badge'; import { DollarSign, TrendingUp, Settings, Eye, BarChart3, Target, Zap } from 'lucide-react'; interface AdNetwork { id: string; name: string; enabled: boolean; priority: number; tagUrl: string; fillRate: number; eCPM: number; revenue: number; impressions: number; } const defaultAdNetworks: AdNetwork[] = [ { id: 'publift', name: 'Publift', enabled: true, priority: 1, tagUrl: 'https://ads.publift.com/vast/tag?zone=12345', fillRate: 85, eCPM: 2.45, revenue: 245.50, impressions: 10000 }, { id: 'vdo', name: 'Vdo.ai', enabled: true, priority: 2, tagUrl: 'https://delivery.vdo.ai/vast/tag?id=67890', fillRate: 78, eCPM: 1.85, revenue: 185.20, impressions: 8500 }, { id: 'primis', name: 'Primis', enabled: true, priority: 3, tagUrl: 'https://tags.primis.tech/vast/tag?pid=54321', fillRate: 72, eCPM: 1.65, revenue: 165.80, impressions: 7200 }, { id: 'adplayer', name: 'AdPlayer.Pro', enabled: false, priority: 4, tagUrl: 'https://vast.adplayer.pro/vast?id=98765', fillRate: 68, eCPM: 1.25, revenue: 125.40, impressions: 6800 }, { id: 'aniview', name: 'Aniview', enabled: false, priority: 5, tagUrl: 'https://player.aniview.com/vast/tag?id=11111', fillRate: 65, eCPM: 1.15, revenue: 115.30, impressions: 6500 } ]; export default function AdNetworks() { const [networks, setNetworks] = useState(defaultAdNetworks); const [editingNetwork, setEditingNetwork] = useState(null); const toggleNetwork = (id: string) => { setNetworks(prev => prev.map(network => network.id === id ? { ...network, enabled: !network.enabled } : network ) ); }; const updateTagUrl = (id: string, tagUrl: string) => { setNetworks(prev => prev.map(network => network.id === id ? { ...network, tagUrl } : network ) ); }; const totalRevenue = networks.reduce((sum, network) => sum + network.revenue, 0); const totalImpressions = networks.reduce((sum, network) => sum + network.impressions, 0); const averageECPM = totalRevenue / (totalImpressions / 1000); return (
{/* Revenue Overview */}
Celotni prihodek
${totalRevenue.toFixed(2)}
Povprečni eCPM
${averageECPM.toFixed(2)}
Skupno prikazov
{totalImpressions.toLocaleString()}
Aktivne mreže
{networks.filter(n => n.enabled).length}
{/* Ad Networks List */} Oglasne mreže Upravljajte svoje oglasne mreže in optimizirajte prihodke {networks.map((network) => (
toggleNetwork(network.id)} data-testid={`switch-${network.id}`} />

{network.name}

Prioriteta {network.priority}
{editingNetwork === network.id ? (
updateTagUrl(network.id, e.target.value)} className="bg-gray-600 border-gray-500 text-white text-sm" placeholder="VAST tag URL" />
) : (

{network.tagUrl}

)}

Fill Rate

{network.fillRate}%

eCPM

${network.eCPM}

Prihodek

${network.revenue}

))}
{/* Performance Chart Placeholder */} Učinkovitost mreže

Graf učinkovitosti oglasnih mrež

Prikazuje eCPM in fill rate trends

); }