const object = value => value !== null && typeof value === 'object' && !Array.isArray(value); const text = value => typeof value === 'string'; const texts = value => Array.isArray(value) && value.every(text); const optionalText = value => value == null || text(value); export function validateOfferResponse(url, data) { let valid = object(data) && data.success === true; if (valid && url === '/api/ai/belge-sor') { valid = text(data.cevap) && Boolean(data.cevap.trim()) && Array.isArray(data.kaynaklar) && data.kaynaklar.every(row => object(row) && Number.isInteger(row.n) && row.n > 0 && text(row.alinti)) && optionalText(data.kaynak) && optionalText(data.kapsam) && (data.sourceReview == null || (object(data.sourceReview) && Number.isInteger(data.sourceReview.totalChunks) && Number.isInteger(data.sourceReview.selectedChunks))); } else if (valid && url === '/api/ai/teklif-denetim') { valid = Array.isArray(data.maddeler) && data.maddeler.length > 0 && data.maddeler.every(row => object(row) && text(row.gereklilik) && ['karsilaniyor','eksik','belirsiz'].includes(row.durum) && optionalText(row.kanit) && optionalText(row.oneri)) && texts(data.eksikler) && Number.isFinite(data.uyum_yuzde) && data.uyum_yuzde >= 0 && data.uyum_yuzde <= 100 && Number.isInteger(data.belirsizSayisi) && data.belirsizSayisi >= 0 && optionalText(data.ozet) && optionalText(data.kapsam); } else if (valid && url === '/api/ai/teklif-taslak') { valid = Array.isArray(data.bolumler) && data.bolumler.length > 0 && data.bolumler.every(row => object(row) && text(row.baslik) && row.baslik.trim() && text(row.icerik) && row.icerik.trim()) && object(data.draftReview) && ['partial','draft'].includes(data.draftReview.status) && texts(data.draftReview.requestedSections) && texts(data.draftReview.missingSections) && texts(data.draftReview.extraSections) && text(data.draftReview.note); } if (!valid) throw new Error('Sunucu yanıtı eksik veya beklenen biçimde değil. Önceki çalışmanız korundu; yeniden deneyin.'); return data; }