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.
setActiveTab('sozlesme')}
className="bg-white/10 hover:bg-white/20 text-white font-bold text-xs px-4 py-2.5 rounded-xl border border-white/20 transition-colors flex items-center gap-2 shrink-0"
>
Sözleşme Sorgulama İncele
{/* 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
)}
addFromReal(f)}
disabled={competitorSaving || watched.has(f.name.trim().toLocaleLowerCase('tr-TR'))}
className="text-[11px] font-bold px-3 py-1.5 rounded-lg border border-indigo-200 text-indigo-700 hover:bg-indigo-50 disabled:opacity-40 shrink-0"
>
{watched.has(f.name.trim().toLocaleLowerCase('tr-TR')) ? 'İzleniyor' : 'Radara Ekle'}
))}
)}
{competitorError&&
{competitorError}
}
{competitorSaving&&
Rakip listesi kaydediliyor…
}
{/* Add New Competitor Form */}
{/* 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 */}
Teklif uyarısı etkin değil
Kazanım uyarısı etkin değil
removeCompetitor(comp.id)}
className="p-2 text-slate-400 hover:text-red-600 rounded-lg transition-colors"
title="Radardan Çıkar"
>
);})}
);
};