import React, { useState, useEffect } from 'react';
import { useApp } from '../../context/AppContext';
import { TelegramBaglanti } from './TelegramBaglanti';
import { getToken } from '../../services/auth';
import { BellRing, Plus, Trash2, Loader2, AlertTriangle, Info, Globe, Sparkles, ChevronDown, ChevronUp, X } from 'lucide-react';
/**
* Otomatik e-posta bildirimi — KONU odaklı.
* Kullanıcı hangi konularda ihale alabildiğini seçer; il/kurum gibi daraltmalar
* isteğe bağlıdır (varsayılan: tüm Türkiye).
*/
export const NotifySubscriptions = () => {
const { authUser, favoriteKurumlar, userProfile, sektorListesi } = useApp();
const [abonelikler, setAbonelikler] = useState(null);
const [busy, setBusy] = useState(false);
const [error, setError] = useState(null);
const [konular, setKonular] = useState([]);
const [ozelKonu, setOzelKonu] = useState('');
const [gelismis, setGelismis] = useState(false);
const [daralt, setDaralt] = useState({ sehir: '', alimTuru: '', favoriKurumlar: false });
// Site tarama
const [site, setSite] = useState(userProfile?.website || '');
const [tarama, setTarama] = useState(null);
const [taraniyor, setTaraniyor] = useState(false);
const [taramaHata, setTaramaHata] = useState(null);
const yukle = () => {
if (!authUser) return;
fetch('/api/notify/subscriptions', { headers: { Authorization: `Bearer ${getToken()}` } })
.then((r) => r.json())
.then((d) => setAbonelikler(d.abonelikler || []))
.catch(() => setAbonelikler([]));
};
useEffect(yukle, [authUser]);
const konuEkle = (k) => {
const t = String(k || '').trim();
if (!t || konular.some((x) => x.toLocaleLowerCase('tr-TR') === t.toLocaleLowerCase('tr-TR'))) return;
setKonular([...konular, t]);
};
const konuCikar = (k) => setKonular(konular.filter((x) => x !== k));
const siteyiTara = async () => {
setTaraniyor(true); setTaramaHata(null); setTarama(null);
try {
const res = await fetch('/api/company/scan', {
method: 'POST',
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${getToken()}` },
body: JSON.stringify({ url: site }),
});
const d = await res.json();
if (!d.success) throw new Error(d.error);
setTarama(d);
} catch (e) {
setTaramaHata(e.message);
} finally { setTaraniyor(false); }
};
const kaydet = async () => {
if (!konular.length) { setError('En az bir konu seçin.'); return; }
setBusy(true); setError(null);
try {
const res = await fetch('/api/notify/subscriptions', {
method: 'POST',
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${getToken()}` },
body: JSON.stringify({
kriter: {
konular,
sehir: daralt.sehir,
alimTuru: daralt.alimTuru,
kurumlar: daralt.favoriKurumlar ? favoriteKurumlar : [],
},
}),
});
const d = await res.json();
if (!d.success) throw new Error(d.error);
setAbonelikler(d.abonelikler);
setKonular([]); setDaralt({ sehir: '', alimTuru: '', favoriKurumlar: false });
} catch (e) { setError(e.message); }
finally { setBusy(false); }
};
const sil = async (id) => {
setBusy(true);
try {
const res = await fetch(`/api/notify/subscriptions?id=${id}`, {
method: 'DELETE', headers: { Authorization: `Bearer ${getToken()}` },
});
const d = await res.json();
setAbonelikler(d.abonelikler || []);
} catch (e) { setError(e.message); }
finally { setBusy(false); }
};
const ozet = (a) => [
a.konular?.length ? a.konular.join(' · ') : null,
a.sehir && `📍 ${a.sehir}`,
a.alimTuru && `(${a.alimTuru})`,
a.kurumlar?.length && `${a.kurumlar.length} favori kurum`,
].filter(Boolean).join(' ') || 'Tüm ihaleler';
if (!authUser) return null;
const oneriler = tarama?.sonuc?.ihaleKonulari || [];
return (
<>
Hangi konularda ihale alabiliyorsanız onları seçin — tüm Türkiye taranır, yalnızca size uyan yeni ihaleler {authUser.email} adresine gelir. Gereksiz ilan gönderilmez.
{/* Mevcut kayıtlar */} {abonelikler === null ? ({ozet(a)}
{a.sonGonderim ? `son gönderim: ${new Date(a.sonGonderim).toLocaleString('tr-TR')}` : 'ilk tur bekleniyor'}
⚠ {taramaHata}
} {tarama && ({tarama.tarananSayfa} sayfa tarandı ({tarama.karakter.toLocaleString('tr-TR')} karakter). {tarama.sonuc?.ozet && <> {tarama.sonuc.ozet}>}
{oneriler.length > 0 && ( <>Önerilen konular — eklemek için tıklayın:
Seçilen konular
{konular.length === 0 ? (Henüz konu seçilmedi.
) : (Hazır sektörler:
{error}
İlk kayıtta mevcut ihaleler bildirilmez — yalnızca temel alınır, sonrasında çıkan yeni ihaleler gönderilir. Aynı ihale iki kez gönderilmez; sonuçlanmış arşiv kayıtları bildirime girmez.