import React, { useState } from 'react'; import { useApp } from '../context/AppContext'; import { Globe, Bot, Sparkles, CheckCircle2, ShieldCheck, Tag, X, Loader2, Database, ArrowRight } from 'lucide-react'; import confetti from 'canvas-confetti'; export const CompanyScannerModal = () => { const { isCompanyScannerOpen, setIsCompanyScannerOpen, userProfile, scanCompanyWebsite, updateCompanyCapabilities, uyumEsigi, setUyumEsigi, gommeDurum } = useApp(); const [urlInput, setUrlInput] = useState(userProfile.website || ''); const [isScanning, setIsScanning] = useState(false); const [scanStep, setScanStep] = useState(0); const [scanSuccess, setScanSuccess] = useState(false); const [newProductInput, setNewProductInput] = useState(''); if (!isCompanyScannerOpen) return null; const handleStartScan = async (e) => { e.preventDefault(); if (!urlInput.trim()) return; setIsScanning(true); setScanSuccess(false); setScanStep(1); setTimeout(() => setScanStep(2), 600); setTimeout(() => setScanStep(3), 1200); const capabilities = await scanCompanyWebsite(urlInput); setIsScanning(false); setScanSuccess(true); confetti({ particleCount: 70, spread: 60 }); }; const caps = userProfile.scrapedCapabilities; const handleRemoveSector = (indexToRemove) => { if (!caps?.extractedSectors) return; const updated = caps.extractedSectors.filter((_, idx) => idx !== indexToRemove); updateCompanyCapabilities({ extractedSectors: updated }); }; const handleRemoveProduct = (indexToRemove) => { if (!caps?.extractedProducts) return; const updated = caps.extractedProducts.filter((_, idx) => idx !== indexToRemove); updateCompanyCapabilities({ extractedProducts: updated }); }; const handleRemoveCert = (indexToRemove) => { if (!caps?.extractedCertifications) return; const updated = caps.extractedCertifications.filter((_, idx) => idx !== indexToRemove); updateCompanyCapabilities({ extractedCertifications: updated }); }; const handleAddCustomProduct = (e) => { e.preventDefault(); if (!newProductInput.trim() || !caps) return; const updated = [...(caps.extractedProducts || []), newProductInput.trim()]; updateCompanyCapabilities({ extractedProducts: updated }); setNewProductInput(''); }; return (
{/* Header */}

Firma Web Sitesi Tarama & Detaylı Ürün Analiz Motoru

Ürün ve faaliyet alanı önerilerini sitenizden çıkarır; profilinize eklemeden önce doğrulayın.

{/* Modal Body */}
{/* Strict Sector Protection Banner */}
Sektör Filtresi Aktif: Sadece web sitenizdeki kesinleşmiş faaliyet alanları ve detaylı ürün kataloğu işlenir.
Açıklanabilir ürün ve sektör eşleşmesi
{/* URL Form */}
setUrlInput(e.target.value)} placeholder="https://www.firmaniz.com.tr" className="w-full bg-white border border-slate-300 rounded-lg pl-9 pr-4 py-2.5 text-xs text-slate-900 font-semibold focus:ring-2 focus:ring-blue-500" />
{/* Scanning Live Indicator */} {isScanning && (
Derin Sayfa Metin Analizi ve Ürün Çıkarımı Sürüyor... %{(scanStep * 33).toFixed(0)}

= 1 ? 'text-blue-900 font-bold' : 'text-slate-400'}> 1. 🌐 {urlInput} alan adına bağlanıldı, harici ve alakasız sektör tanımları elendi.

= 2 ? 'text-blue-900 font-bold' : 'text-slate-400'}> 2. 📄 Web sitesindeki "Hakkımızda", "Ürünler" ve "Katalog" alt sayfalarındaki ürün isimleri ayıklandı.

= 3 ? 'text-blue-900 font-bold' : 'text-slate-400'}> 3. 💾 Firmanın gerçek ürün yelpazesi ve ISO/ÜTS kalite belgeleri İhaleist veritabanına işlendi.

)} {scanSuccess && (
Web sitenizdeki ürünler ve doğrudan doğrulanmış sektörler veritabanına işlendi! Alakasız sektörler elendi.
)} {/* Current Extracted Capabilities Database View */} {caps && (

Veritabanındaki Doğrulanmış Firma Ürün & Sektör Profili

Son Tarama: {caps.scrapedAt}
{/* Sectors */}
Doğrulanmış Sektörler ({caps.extractedSectors?.length || 0})
{caps.extractedSectors?.map((s, i) => (
{s}
))}
{/* Products */}
Detaylı Ürün & Hizmet Kataloğu ({caps.extractedProducts?.length || 0}) Sayfadan Ayıklanan Detaylı Kalemler {/* Add Custom Item Form */}
setNewProductInput(e.target.value)} placeholder="+ Yeni Ürün / İhale Kalemi Ekle..." className="flex-1 bg-white border border-slate-300 rounded-lg px-3 py-1.5 text-xs text-slate-900 font-semibold focus:ring-2 focus:ring-emerald-500" />
{caps.extractedProducts?.map((p, i) => (
📦 {p}
))}
{/* Certifications */}
Web Sitesinde Tespit Edilen Sertifika ve Kayıtlar
{caps.extractedCertifications?.map((c, i) => ( 📜 {c} ))}
)}
{/* Firma eşiği: "uyumlu" filtresi ve bildirim bu skordan itibaren. (Önceki "%98+ doğruluk" cümlesi ölçülmemiş bir iddiaydı, kaldırıldı.) */}
Uyum eşiği — "Uyumlu" filtresi bu skordan itibaren gösterir %{uyumEsigi}
setUyumEsigi(e.target.value)} className="w-full accent-blue-600 cursor-pointer" />

Skor = profil terimlerinin ihalede geçmesi (başlık, teklif cetveli, OKAS) + anlamsal yakınlık bonusu. {gommeDurum === 'hazir' && <> Anlamsal bonus etkin.} {gommeDurum === 'bekliyor' && <> Anlamsal bonus hesaplanıyor…} {(gommeDurum === 'kapali' || gommeDurum === 'hata') && <> Anlamsal bonus şu an kapalı; yalnızca terim eşleşmesi.}

{/* Footer */}

Terim ekledikçe skor keskinleşir; kalem havuzu doldukça teklif cetveli eşleşmeleri devreye girer.

); };