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 */}
setActiveTenderDetail(null)}
className="flex items-center gap-2 text-xs font-semibold text-slate-300 hover:text-white transition-colors bg-slate-800 px-3 py-1.5 rounded-lg border border-slate-700"
>
Listeye Geri Dön
İnceleyen: {userProfile.name}
toggleTrackTender(tender.id)}
className={`flex items-center gap-1.5 font-bold px-3 py-1.5 rounded-lg text-xs transition-colors ${
tender.takipte ? 'bg-amber-400 text-slate-900' : 'bg-slate-700 text-white hover:bg-slate-600'
}`}
>
{tender.takipte ? 'Takipte' : 'Takip Et'}
setActiveTenderDetail(null)}
className="text-slate-400 hover:text-white p-1"
>
{/* 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 (
setActiveTab(tab.id)}
className={`flex items-center gap-2 px-4 py-2.5 rounded-lg text-xs font-bold transition-all whitespace-nowrap ${
isActive
? 'bg-blue-600 text-white shadow-xs'
: 'text-slate-600 hover:bg-slate-100'
}`}
>
{tab.label}
{tab.badge && (
{tab.badge}
)}
);
})}
{/* 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)
#
Malzeme Adı
Miktar
Tahmini Birim Fiyat
Toplam Tutarlar
{tender.items?.map((item, index) => (
{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}
))}
{/* Right Sidebar of Details: TCMB Kur & Calendar & Specs */}
{/* TCMB Kur Farkı Calculator */}
Kur Farkı Hesaplayıcı
TCMB Canlı
USD / TRY
₺{usdRate}
EUR / TRY
₺{eurRate}
Teklif Tutarı (TL)
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
setActiveTab('pdf_stamp')}
className="w-full bg-blue-600 hover:bg-blue-500 text-white font-bold py-2.5 px-3 rounded-lg text-xs flex items-center justify-center gap-2 shadow-2xs"
>
Birim Fiyat Cetveli (PDF Aç/Düzenle)
Google / Outlook Takvime Ekle
)}
{/* 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.
{
import('../services/pdf').then(({ generateBidSheetPDF }) => {
generateBidSheetPDF(tender, { firma: userProfile.company, stamp: true });
});
}}
className="bg-amber-600 hover:bg-amber-500 text-white font-bold px-4 py-2 rounded-lg flex items-center gap-1.5 shadow-2xs"
>
Kaşeli PDF İndir
{/* Interactive PDF Sheet Canvas Simulator */}
{/* Paper sheet */}
{tender.kurum}
BİRİM FİYAT TEKLİF CETVELİ — İKN: {tender.ikn}
Sıra
Malzeme Adı
Miktar
Birim Fiyat (TL)
Toplam (TL)
{tender.items?.map((item, idx) => (
{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'}
setIsAiSpecAnalyzerOpen(true)}
className="bg-amber-400 hover:bg-amber-300 text-slate-950 font-black px-4 py-2.5 rounded-xl text-xs flex items-center gap-2 transition-colors shadow-md cursor-pointer"
>
⚡ Şartname Yükle & AI Analizi Başlat
Kritik Yeterlik Şartları
{tender.yeterlikKriterleri?.map((k, i) => (
{k}
))}
)}
{/* Tab 4: Readiness Checklist */}
{activeTab === 'checklist' && (
)}
);
};