import React, { useState, useMemo } from 'react'; import { useApp } from '../../context/AppContext'; import { Radar, Bell, Plus, ShieldAlert, Award, FileText, CheckCircle2, Trash2, ArrowRight, TrendingUp } from 'lucide-react'; import { firmStats, formatTL } from '../../services/analytics'; export const CompetitorRadar = () => { const { competitorWatchlist, saveCompetitorWatchlist, competitorSaving, competitorError, setActiveTab, tenders } = useApp(); const [newCompetitorName, setNewCompetitorName] = useState(''); const [newSector, setNewSector] = useState('Medikal & Tıbbi Malzeme'); // Gerçek kazanan-firma analizi (canlı veriden) const { firms, awardCount, totalMarket } = useMemo(() => firmStats(tenders), [tenders]); const watched = new Set(competitorWatchlist.map((c) => c.name.trim().toLocaleLowerCase('tr-TR'))); const addFromReal = (f) => { if (watched.has(f.name.trim().toLocaleLowerCase('tr-TR'))) return; saveCompetitorWatchlist((prev) => [ { id: 'cw-' + crypto.randomUUID(), name: f.name, sector: f.sectors[0] || 'Genel', winCount: f.wins, totalRevenue: f.total, marketShare: f.share, status: 'Aktif İzleniyor', alertOnBid: true, alertOnWin: true }, ...prev, ]); }; const handleAddCompetitor = async (e) => { e.preventDefault(); if (!newCompetitorName.trim() || watched.has(newCompetitorName.trim().toLocaleLowerCase('tr-TR'))) return; const newComp = { id: 'cw-' + crypto.randomUUID(), name: newCompetitorName.trim(), sector: newSector, status: 'Aktif İzleniyor', alertOnBid: true, alertOnWin: true }; if(await saveCompetitorWatchlist(prev => [newComp, ...prev]))setNewCompetitorName(''); }; const removeCompetitor = (id) => { saveCompetitorWatchlist(prev => prev.filter(c => c.id !== id)); }; return (
{/* Header Banner */}

Rakip Radar

Kayıtlı Firmalar

Rakip listenizi kaydedin ve yüklenen sonuç/sözleşme verileriyle karşılaştırın. Rakip teklif veya kazanımına özel otomatik bildirim şu anda etkin değil.

{/* GERÇEK: Piyasadaki Kazanan Firmalar (canlı veriden hesaplanır) */}

Kazanan Firma Analizi — Canlı Veri

{awardCount} sonuçlanmış ihale · toplam {formatTL(totalMarket)}
{firms.length === 0 ? (
Henüz kazanan firma verisi birikmedi. Doğrudan temin / sonuç ilanları geldikçe bu tablo gerçek kazanan firmalar ve sözleşme tutarlarıyla otomatik dolar.
) : (
{firms.slice(0, 12).map((f, i) => (
{i + 1} {f.name}
🏆 {f.wins} ihale · 💰 {formatTL(f.total)} {f.share ? `· %${f.share} pay` : ''} {f.sectors[0] ? `· ${f.sectors[0]}` : ''}
{/* Kazanan istihbaratı: ne kadar aşağı veriyor, kaç rakibe karşı kazanıyor */}
{f.kirimOrani != null && ( ↓ %{f.kirimOrani} kırım )} {f.ortTeklif != null && ( ⚔ ort. {f.ortTeklif} teklif )} ⛔ yasaklı sorgula {f.tekTeklifOrani != null && f.tekTeklifOrani > 0 && ( %{f.tekTeklifOrani} tek teklif )}
))}
)}
{competitorError&&

{competitorError}

} {competitorSaving&&

Rakip listesi kaydediliyor…

} {/* Add New Competitor Form */}
setNewCompetitorName(e.target.value)} placeholder="Örn: ABC Medikal Sanayi ve Ticaret A.Ş." className="w-full bg-slate-50 border border-slate-300 rounded-xl px-4 py-2.5 text-xs font-semibold text-slate-900 focus:ring-2 focus:ring-indigo-500" />
{/* Tracked Competitors Table */}

Takipteki Rakip Firmalar ({competitorWatchlist.length})

Yüklenen havuzdaki sonuçlar
{competitorWatchlist.map((comp) => { const stats=firms.find(f=>f.name.trim().toLocaleLowerCase('tr-TR')===comp.name.trim().toLocaleLowerCase('tr-TR')); return (
{/* Info */}

{comp.name}

{comp.sector}
🏆 Kazandığı İhale: {stats?.wins ?? 'Veri yok'} 💰 Toplam Hacim: {stats ? formatTL(stats.total) : 'Veri yok'} 📊 Yüklü havuzdaki pay: {stats ? `%${stats.share}` : 'Veri yok'}
{/* Notification Toggles & Actions */}
);})}
); };