"use client";

import { useEffect, useState } from "react";
import { readApiResponse } from "../lib/chunked-upload";

type DiagnosticCode = { code: string; system: string; origin: string; description: string; causes: string; symptoms: string; severity: string; vehicles: string; source: string; exact: boolean };
type EcuEntry = { id: string; manufacturer: string; family: string; part_pattern: string; fuel_type: string; generation: string; protocols: string; vehicles: string; notes: string };
type DiagnosticPayload = { codes: DiagnosticCode[]; ecus: EcuEntry[]; query: string };

const starterSearches = ["P0401", "P0299", "U0100", "EDC17", "MD1", "0 281"];

export function DiagnosticCenter({ value, setValue }: { value?: string; setValue?: (value: string) => void }) {
  const [query, setQuery] = useState(value || "");
  const [data, setData] = useState<DiagnosticPayload>({ codes: [], ecus: [], query: "" });
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState("");
  const [selectedCode, setSelectedCode] = useState<string | null>(null);
  const [selectedEcu, setSelectedEcu] = useState<string | null>(null);

  useEffect(() => { if (value !== undefined && value !== query) setQuery(value); }, [value]);
  useEffect(() => {
    const clean = query.trim();
    setValue?.(query);
    if (clean.length < 2) { setData({ codes: [], ecus: [], query: clean }); setLoading(false); setError(""); return; }
    let active = true;
    const timer = window.setTimeout(async () => {
      setLoading(true); setError("");
      try {
        const response = await fetch(`/api/diagnostics?q=${encodeURIComponent(clean)}`, { cache: "no-store" });
        const result = await readApiResponse<DiagnosticPayload>(response);
        if (active) setData(result);
      } catch (caught) {
        if (active) setError(caught instanceof Error ? caught.message : "Tanı verileri alınamadı");
      } finally { if (active) setLoading(false); }
    }, 260);
    return () => { active = false; window.clearTimeout(timer); };
  }, [query]);

  return <div className="diagnosticCenter">
    <section className="diagnosticHero">
      <div className="diagnosticGlow"/><div><span className="eyebrow">AKILLI TEKNİK BİLGİ MERKEZİ</span><h2>DTC ve Bosch ECU araması</h2><p>Arıza kodunu, ECU ailesini veya Bosch parça numarasını yazın; sistem açıklama, olası nedenler, protokoller ve doğrulama notlarını birlikte göstersin.</p></div>
      <div className="diagnosticSearch"><span>⌕</span><input autoFocus={Boolean(value)} value={query} onChange={event => setQuery(event.target.value)} placeholder="Örn. P0401, EDC17C64, MD1 veya 0 281…"/><kbd>ARA</kbd></div>
      <div className="diagnosticChips">{starterSearches.map(item => <button key={item} onClick={() => setQuery(item)}>{item}</button>)}</div>
    </section>
    {!query.trim() && <section className="diagnosticIntroGrid"><article><i>DTC</i><strong>Standart ve üretici kodları</strong><p>P, B, C ve U kod ailesini sistem, belirti, önem ve olası nedenlerle inceleyin.</p></article><article><i>ECU</i><strong>Bosch ECU aileleri</strong><p>EDC, MED, ME, MD1 ve MG1 ailelerini yakıt türü, nesil ve iletişim protokolüyle bulun.</p></article><article><i>HW</i><strong>Güvenli eşleştirme</strong><p>Kesin ECU tespiti için etiket, tam parça numarası, HW/SW ve araç bilgilerini birlikte doğrulayın.</p></article></section>}
    {loading && <div className="diagnosticLoading"><i/><span>Teknik veriler taranıyor…</span></div>}
    {error && <div className="formError">{error}</div>}
    {!loading && query.trim().length >= 2 && !data.codes.length && !data.ecus.length && !error && <div className="diagnosticEmpty"><span>⌕</span><strong>Sonuç bulunamadı</strong><p>Farklı bir kod, ECU ailesi veya parça numarası deneyin.</p></div>}
    {!!data.codes.length && <section className="diagnosticSection"><div className="diagnosticSectionHead"><div><span>DTC SONUÇLARI</span><h3>Arıza kodları</h3></div><b>{data.codes.length}</b></div><div className="diagnosticResultGrid">{data.codes.map(code => <article className={`dtcResultCard severity-${code.severity.toLowerCase()}`} key={code.code}><button className="diagnosticCardButton" onClick={() => setSelectedCode(selectedCode === code.code ? null : code.code)}><span className="dtcCode">{code.code}</span><span className="diagnosticOrigin">{code.origin}</span><h4>{code.description}</h4><p>{code.system}</p><div><b>{code.severity}</b><em>{selectedCode === code.code ? "Detayı kapat" : "Detayı göster"} ›</em></div></button>{selectedCode === code.code && <div className="diagnosticDetail"><dl><div><dt>Olası nedenler</dt><dd>{code.causes}</dd></div><div><dt>Belirtiler</dt><dd>{code.symptoms}</dd></div><div><dt>Araç kapsamı</dt><dd>{code.vehicles}</dd></div><div><dt>Kaynak / doğrulama</dt><dd>{code.source}</dd></div></dl>{!code.exact && <div className="diagnosticCaution">Bu kod geçerli biçimde olsa da kesin OEM açıklaması marka, model, yıl ve kontrol modülü servis verisiyle doğrulanmalıdır.</div>}</div>}</article>)}</div></section>}
    {!!data.ecus.length && <section className="diagnosticSection"><div className="diagnosticSectionHead ecuHead"><div><span>BOSCH ECU SONUÇLARI</span><h3>Kontrol ünitesi aileleri</h3></div><b>{data.ecus.length}</b></div><div className="ecuResultList">{data.ecus.map(ecu => <article className="ecuResultCard" key={ecu.id}><button className="diagnosticCardButton" onClick={() => setSelectedEcu(selectedEcu === ecu.id ? null : ecu.id)}><span className="ecuBrand">{ecu.manufacturer}</span><h4>{ecu.family}</h4><code>{ecu.part_pattern}</code><div className="ecuMeta"><span>{ecu.fuel_type}</span><span>{ecu.generation}</span><span>{ecu.protocols}</span></div><em>{selectedEcu === ecu.id ? "Detayı kapat" : "Teknik detayı aç"} ›</em></button>{selectedEcu === ecu.id && <div className="diagnosticDetail"><dl><div><dt>Yaygın uygulamalar</dt><dd>{ecu.vehicles}</dd></div><div><dt>Doğrulama notu</dt><dd>{ecu.notes}</dd></div></dl></div>}</article>)}</div></section>}
    <footer className="diagnosticDisclaimer"><span>i</span><p>Bu bilgi merkezi teşhis yardımcısıdır. Parça değişimi veya yazılım işlemi öncesinde üretici servis dokümanı, ölçüm değerleri ve ECU etiketiyle doğrulama yapın.</p></footer>
  </div>;
}
