import React, { useState } from 'react'; import { useApp } from '../context/AppContext'; import { TenderDocuments } from './TenderDocuments'; import { TeklifCetveliKalemleri } from './TeklifCetveliKalemleri'; import { X, Star, Share2, Calendar, MapPin, Building2, Tag, FileText, CheckSquare, DollarSign, Calculator, Download, Sparkles, AlertTriangle, ShieldCheck, Send, Stamp, ArrowLeft, ExternalLink, Printer } from 'lucide-react'; import confetti from 'canvas-confetti'; export const TenderDetailModal = () => { const { activeTenderDetail, setActiveTenderDetail, toggleTrackTender, userProfile, setIsAiSpecAnalyzerOpen } = useApp(); const [activeTab, setActiveTab] = useState('details'); // 'details', 'pdf_stamp', 'ai_assistant', 'checklist', 'kurum_tenders' const [noteText, setNoteText] = useState(''); const [savedNotes, setSavedNotes] = useState([ { id: 1, author: 'Hikmet Tanrıverdi', text: 'Kayseri deposuna doğrudan sevkiyat yapılacak. Birim fiyat 145 TL üstü olmalı.', date: 'Bugün 10:15' } ]); // Kur Farkı Calculator State const [bidAmount, setBidAmount] = useState(15000); const usdRate = 36.45; const eurRate = 39.80; // Stamp Drag Position State const [stampPos, setStampPos] = useState({ x: 220, y: 180 }); const [isDraggingStamp, setIsDraggingStamp] = useState(false); if (!activeTenderDetail) return null; const tender = activeTenderDetail; const handleAddNote = (e) => { e.preventDefault(); if (!noteText.trim()) return; setSavedNotes([...savedNotes, { id: Date.now(), author: userProfile.name, text: noteText.trim(), date: 'Az önce' }]); setNoteText(''); }; const handleExportICS = () => { confetti({ particleCount: 50 }); const icsData = `BEGIN:VCALENDAR VERSION:2.0 PRODID:-//İhaleist//İhale Takvimi//TR BEGIN:VEVENT SUMMARY:İhale Son Teslim: ${tender.baslik} DESCRIPTION:İKN: ${tender.ikn} - ${tender.kurum} DTSTART:20260810T120000Z DTEND:20260810T130000Z END:VEVENT END:VCALENDAR`; const blob = new Blob([icsData], { type: 'text/calendar;charset=utf-8' }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.setAttribute('download', `ihale_${tender.ikn}.ics`); document.body.appendChild(link); link.click(); document.body.removeChild(link); }; const handleStampMouseDown = () => setIsDraggingStamp(true); const handleStampMouseMove = (e) => { if (!isDraggingStamp) return; const rect = e.currentTarget.getBoundingClientRect(); setStampPos({ x: Math.max(20, Math.min(rect.width - 150, e.clientX - rect.left - 60)), y: Math.max(20, Math.min(rect.height - 80, e.clientY - rect.top - 30)) }); }; const handleStampMouseUp = () => setIsDraggingStamp(false); return (
{/* Top Header Controls */}
İnceleyen: {userProfile.name}
{/* Scrollable Container */}
{/* Main Title Header */}
{tender.alimTuru} İKN: {tender.ikn} {tender.aciliyetBadge && ( {tender.aciliyetBadge} )} Ekleme: {tender.eklenmeZamani}

{tender.baslik}

{/* Metadata Cards Grid */}
Kurum Adı {tender.kurum}
İhale Tarihi & Saat {tender.tarih} - {tender.saat}
Şehir / Bölge {tender.sehir} ({tender.bolge})
Yaklaşık Maliyet {tender.yaklasikMaliyet ? `${tender.yaklasikMaliyet.toLocaleString('tr-TR')} TL` : 'Gizli / Belirtilmemiş'}
{/* Navigation Tabs */}
{[ { id: 'details', label: 'İhale Detayları', icon: FileText }, { id: 'pdf_stamp', label: 'Birim Fiyat Cetveli (PDF & Kaşe)', icon: Stamp, badge: 'İnteraktif' }, { id: 'ai_assistant', label: 'Yapay Zeka Asistanı', icon: Sparkles, badge: '%94 Uyum' }, { id: 'checklist', label: 'Hazırlık Checklist', icon: CheckSquare }, ].map(tab => { const Icon = tab.icon; const isActive = activeTab === tab.id; return ( ); })}
{/* Tab 1: İhale Detayları */} {activeTab === 'details' && (
{/* Description & Terms */}

İhale Açıklaması & Teslimat Koşulları

{tender.aciklama}

Teslimat Süresi {tender.teslimatSuresi}
Teslimat Yeri {tender.teslimYeri}
{/* Ortak havuzdan teklif cetveli kalemleri */} {/* Material Table */} {tender.items?.length > 0 && (

Malzeme / Kalem Listesi ({tender.items?.length || 0} Kalem)

{tender.items?.map((item, index) => ( ))}
# Malzeme Adı Miktar Tahmini Birim Fiyat Toplam Tutarlar
{index + 1} {item.ad} {item.miktar} {item.birim} {item.birimFiyat ? `${item.birimFiyat} TL` : '—'} {item.birimFiyat ? `${(item.birimFiyat * parseFloat(item.miktar)).toLocaleString('tr-TR')} TL` : '—'}
)} {/* Team Notes Area */}

Ekip Notları

{savedNotes.map(n => (
{n.author} {n.date}

{n.text}

))}
setNoteText(e.target.value)} placeholder="Ekip arkadaşlarınıza not yazın..." className="flex-1 bg-slate-50 border border-slate-300 rounded-lg px-3 py-2 text-xs" />
{/* Right Sidebar of Details: TCMB Kur & Calendar & Specs */}
{/* TCMB Kur Farkı Calculator */}
Kur Farkı Hesaplayıcı TCMB Canlı
USD / TRY ₺{usdRate}
EUR / TRY ₺{eurRate}
setBidAmount(Number(e.target.value))} className="w-full bg-white/10 border border-white/20 rounded-lg px-3 py-1.5 text-xs text-white" />
Dolar Karşılığı: ${(bidAmount / usdRate).toFixed(2)}
Euro Karşılığı: €{(bidAmount / eurRate).toFixed(2)}
{/* Downloads & Calendar */}

İhale Dosyaları & Takvim

)} {/* Tab 2: PDF Birim Fiyat Cetveli & Kaşe Editörü */} {activeTab === 'pdf_stamp' && (
Teklif cetvelinizi doldurun ve Dijital Kaşenizi sürükleyerek belgenin altına yerleştirin.
{/* Interactive PDF Sheet Canvas Simulator */}
{/* Paper sheet */}

{tender.kurum}

BİRİM FİYAT TEKLİF CETVELİ — İKN: {tender.ikn}

{tender.items?.map((item, idx) => ( ))}
Sıra Malzeme Adı Miktar Birim Fiyat (TL) Toplam (TL)
{idx + 1} {item.ad} {item.miktar} {item.birim} {item.birimFiyat || 150} TL {((item.birimFiyat || 150) * parseFloat(item.miktar)).toLocaleString('tr-TR')} TL

{userProfile.company}

Yetkili İmza ve Kaşe Alanı

{/* Draggable Stamp Element */}
{userProfile.company.slice(0, 25)} MÜDÜR İMZA & KAŞE 2026-08-07 ONAYLI
↕ Sürükleyip Bırakın
)} {/* Tab 3: AI Asistanı */} {activeTab === 'ai_assistant' && (

Yapay Zeka Teklif & Risk Değerlendirmesi

Teknik şartname ve geçmiş ihale sonuçları analiz edildi.

{tender.aiMatchScore != null && ( %{tender.aiMatchScore} Şirket Uyumu )}
{/* Skorun nedeni: hangi profil terimi ihalenin neresinde geçiyor */} {tender.uyumNedenleri?.length > 0 && (
{tender.uyumNedenleri.map((n, i) => ( {n.terim} · {n.alan} ))}
)}
Risk Skoru {tender.aiRiskScore || 'Analiz Bekliyor'}{tender.aiRiskScore ? ' Risk' : ''}
Önerilen Teklif Aralığı {tender.aiBidRange?.recommended != null ? `₺${tender.aiBidRange.recommended.toLocaleString('tr-TR')}` : '—'}
{tender.gecerliTeklifSayisi != null || tender.teklifSayisi != null ? 'Katılan Firma' : 'Rekabet Verisi'} {tender.gecerliTeklifSayisi != null ? `${tender.gecerliTeklifSayisi} geçerli teklif` : tender.teklifSayisi != null ? `${tender.teklifSayisi} teklif` : 'Sonuçlanınca gelir'}

Kritik Yeterlik Şartları

    {tender.yeterlikKriterleri?.map((k, i) => (
  • {k}
  • ))}
)} {/* Tab 4: Readiness Checklist */} {activeTab === 'checklist' && (

İhale Hazırlık Adımları

{[ 'Birim fiyat cetveli kontrol edildi ve dolduruldu', 'İmza sirküleri ve yetki belgesi hazırlandı', 'ÜTS kayıtları ve SUT kodları doğrulandı', 'TCMB döviz kur riski hesaplandı', 'EKAP üzerinden teklif zarfı oluşturuldu' ].map((item, idx) => ( ))}
)}
); };