// ──── REPORTS ────
function Reports({ data }) {
  const { Card, Tag, fmtTRY } = window.DentUI;
  const I = window.DentIcons;

  // Real clinic stats from patient data
  const clinicStats = React.useMemo(() => {
    return data.CLINICS.map(c => {
      let earned = 0, paid = 0;
      data.PATIENTS.filter(p => p.clinicId === c.id).forEach(p => {
        let rem = p.paid || 0;
        (p.plan || []).filter(s => s.status === "Tamamlandı" && s.fee > 0).forEach(s => {
          const sh = s.share || Math.round(s.fee * (c.share || 50) / 100);
          earned += sh;
          if (rem >= s.fee) paid += sh;
          rem = Math.max(0, rem - s.fee);
        });
      });
      return { clinic: c, earned, paid, pending: Math.max(0, earned - paid) };
    });
  }, [data.PATIENTS, data.CLINICS]);

  const maxEarn = Math.max(...clinicStats.map(s => s.earned), 1);
  const allDone = data.PATIENTS.flatMap(p => (p.plan || []).filter(s => s.status === "Tamamlandı" && s.fee > 0));
  const totalEarned = clinicStats.reduce((a, b) => a + b.earned, 0);
  const avgFee = allDone.length ? Math.round(allDone.reduce((a, s) => a + s.fee, 0) / allDone.length) : 0;
  const avgShare = data.CLINICS.length ? Math.round(data.CLINICS.reduce((a, c) => a + (c.share || 50), 0) / data.CLINICS.length) : 0;

  // Shared helper: transaction rows
  function getTxRows() {
    const rows = [["Klinik","Hasta","İşlem","Tarih","Ücret (₺)","Hakediş (₺)","Durum"]];
    data.PATIENTS.forEach(p => {
      const c = data.CLINICS.find(cc => cc.id === p.clinicId); if (!c) return;
      let rem = p.paid || 0;
      (p.plan || []).filter(s => s.status === "Tamamlandı" && s.fee > 0).forEach(s => {
        const sh = s.share || Math.round(s.fee * (c.share || 50) / 100);
        const isPaid = rem >= s.fee; rem = Math.max(0, rem - s.fee);
        rows.push([c.name, p.name, s.procedure, s.date || "", s.fee, sh, isPaid ? "Tahsil" : "Bekliyor"]);
      });
    });
    return rows;
  }

  function saveWb(wb, filename) { XLSX.writeFile(wb, `${filename}_${new Date().toISOString().slice(0,10)}.xlsx`); }
  function mkSheet(rows, widths) { const ws = XLSX.utils.aoa_to_sheet(rows); ws["!cols"] = widths.map(w=>({wch:w})); return ws; }

  const exports = {
    r1() {
      const wb = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(wb, mkSheet(getTxRows(), [22,22,28,12,14,14,12]), "Aylık Hakediş");
      saveWb(wb, "DentSide_AylikHakedis");
    },
    r2() {
      const rows = [["Klinik","Hakediş Oranı (%)","Toplam Hakediş (₺)","Tahsil (₺)","Bekleyen (₺)"]];
      clinicStats.forEach(s => rows.push([s.clinic.name, s.clinic.share||50, s.earned, s.paid, s.pending]));
      const wb = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(wb, mkSheet(rows, [22,18,20,16,16]), "Klinik Gelir");
      saveWb(wb, "DentSide_KlinikGelir");
    },
    r3() {
      const rows = [["Hasta","Klinik","Tedavi","Toplam (₺)","Ödenen (₺)","Bakiye (₺)","Durum"]];
      data.PATIENTS.forEach(p => {
        const c = data.CLINICS.find(cc => cc.id === p.clinicId);
        rows.push([p.name, c?.name||"", p.treatment||"", p.totalFee||0, p.paid||0, p.balance||0, p.status||""]);
      });
      const wb = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(wb, mkSheet(rows, [22,22,28,14,14,14,14]), "Hasta Tedaviler");
      saveWb(wb, "DentSide_HastaTedavi");
    },
    r4() {
      const rows = [["Klinik","Hasta","İşlem","Tarih","Ücret (₺)","Hakediş (₺)"]];
      data.PATIENTS.forEach(p => {
        const c = data.CLINICS.find(cc => cc.id === p.clinicId); if (!c) return;
        let rem = p.paid || 0;
        (p.plan || []).filter(s => s.status === "Tamamlandı" && s.fee > 0).forEach(s => {
          const sh = s.share || Math.round(s.fee * (c.share || 50) / 100);
          const isPaid = rem >= s.fee; rem = Math.max(0, rem - s.fee);
          if (!isPaid) rows.push([c.name, p.name, s.procedure, s.date||"", s.fee, sh]);
        });
      });
      const wb = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(wb, mkSheet(rows, [22,22,28,12,14,14]), "Bekleyen Alacaklar");
      saveWb(wb, "DentSide_Bekleyen");
    },
    r5() {
      const pm = {};
      data.PATIENTS.forEach(p => {
        const c = data.CLINICS.find(cc => cc.id === p.clinicId); if (!c) return;
        (p.plan || []).filter(s => s.status === "Tamamlandı" && s.fee > 0).forEach(s => {
          const k = s.procedure || "Diğer";
          if (!pm[k]) pm[k] = { count:0, fee:0, share:0 };
          pm[k].count++; pm[k].fee += s.fee;
          pm[k].share += s.share || Math.round(s.fee * (c.share||50) / 100);
        });
      });
      const rows = [["İşlem","Seans","Toplam Ücret (₺)","Toplam Hakediş (₺)","Ort. Ücret (₺)"]];
      Object.entries(pm).sort((a,b)=>b[1].fee-a[1].fee).forEach(([k,d])=>
        rows.push([k, d.count, d.fee, d.share, Math.round(d.fee/d.count)]));
      const wb = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(wb, mkSheet(rows, [28,12,18,18,16]), "İşlem Analizi");
      saveWb(wb, "DentSide_IslemAnaliz");
    },
    r6() {
      const rows = [["Hasta","Klinik","Tedavi","Toplam Seans","Tamamlanan","Ücret (₺)","Ödenen (₺)"]];
      data.PATIENTS.forEach(p => {
        const c = data.CLINICS.find(cc => cc.id === p.clinicId);
        const total = (p.plan||[]).length;
        const done = (p.plan||[]).filter(s=>s.status==="Tamamlandı").length;
        rows.push([p.name, c?.name||"", p.treatment||"", total, done, p.totalFee||0, p.paid||0]);
      });
      const wb = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(wb, mkSheet(rows, [22,22,28,14,14,16,16]), "Tedavi Performansı");
      saveWb(wb, "DentSide_TedaviPerf");
    },
    all() {
      const wb = XLSX.utils.book_new();
      const s1 = [["Klinik","Hakediş %","Kazanılan (₺)","Tahsil (₺)","Bekleyen (₺)"]];
      clinicStats.forEach(s => s1.push([s.clinic.name, s.clinic.share||50, s.earned, s.paid, s.pending]));
      XLSX.utils.book_append_sheet(wb, mkSheet(s1, [22,12,18,16,16]), "Klinik Özeti");
      XLSX.utils.book_append_sheet(wb, mkSheet(getTxRows(), [22,22,28,12,14,14,12]), "İşlem Hareketleri");
      const s3 = [["Hasta","Klinik","Tedavi","Toplam (₺)","Ödenen (₺)","Bakiye (₺)","Durum"]];
      data.PATIENTS.forEach(p => {
        const c = data.CLINICS.find(cc => cc.id === p.clinicId);
        s3.push([p.name, c?.name||"", p.treatment||"", p.totalFee||0, p.paid||0, p.balance||0, p.status||""]);
      });
      XLSX.utils.book_append_sheet(wb, mkSheet(s3, [22,22,28,14,14,14,14]), "Hastalar");
      saveWb(wb, "DentSide_TamRapor");
    },
  };

  const reportTemplates = [
    { id:"r1", title:"Aylık hakediş raporu",   desc:"Tüm kliniklerden tamamlanan seans ve hakediş özeti" },
    { id:"r2", title:"Klinik bazlı gelir",      desc:"Klinik başına hakediş, tahsil ve bekleyen alacak" },
    { id:"r3", title:"Hasta bazlı tedavi",      desc:"Hasta bazında işlem ve ödeme dökümü" },
    { id:"r4", title:"Ödenmeyen işlemler",      desc:"Klinik bazında bekleyen alacak listesi" },
    { id:"r5", title:"İşlem bazlı analiz",      desc:"İşlem tipine göre seans sayısı ve gelir dağılımı" },
    { id:"r6", title:"Tedavi performansı",      desc:"Seans sayısı, tamamlanma oranı ve ödeme durumu" },
  ];

  const yTicks = [1, 0.75, 0.5, 0.25, 0];

  return (
    <div className="view">
      <div className="page-head">
        <div>
          <h1 className="page-title">Raporlar</h1>
          <p className="page-sub">Gerçek verilerden otomatik üretilen raporları indir veya dışa aktar.</p>
        </div>
        <div className="page-actions">
          <button className="btn btn--accent" onClick={exports.all}><I.Export size={15}/>Toplu indir</button>
        </div>
      </div>

      <div className="rep-overview">
        <Card padding={24}>
          <div className="card-head">
            <div>
              <h3 className="card-title">Klinik bazlı hakediş karşılaştırması</h3>
              <p className="card-sub">Tüm zamanlar · tamamlanan seanslar</p>
            </div>
          </div>

          <div className="rep-chart-area">
            {/* Y-axis */}
            <div className="rep-y-axis">
              {yTicks.map((r, i) => (
                <div key={i} className="rep-y-lbl num">
                  {r === 0 ? "₺0" : fmtTRY(Math.round(maxEarn * r))}
                </div>
              ))}
            </div>

            {/* Chart body */}
            <div className="rep-chart-body">
              {yTicks.map((r, i) => (
                <div key={i} className="rep-grid-line" style={{bottom: `${r * 100}%`}}/>
              ))}
              <div className="rep-bars-inner">
                {clinicStats.map(s => {
                  const totalPct = (s.earned / maxEarn) * 100;
                  const pendingPct = s.earned > 0 ? (s.pending / s.earned) * 100 : 0;
                  const paidPct = 100 - pendingPct;
                  const hasPending = s.pending > 0;
                  return (
                    <div key={s.clinic.id} className="rep-bar-item">
                      <div className="rep-bar-stack" style={{height: `${totalPct}%`}}>
                        {s.earned > 0 && <span className="rep-bar__lbl num">{fmtTRY(s.earned)}</span>}
                        <div style={{height:`${pendingPct}%`, background:s.clinic.color+"44", borderRadius:hasPending?"5px 5px 0 0":"0", minHeight: hasPending?3:0}}/>
                        <div style={{height:`${paidPct}%`, background:s.clinic.color, borderRadius:hasPending?"0":"5px 5px 0 0", minHeight:s.paid>0?3:0}}/>
                      </div>
                      <div className="rep-bar__name">{s.clinic.name.split(" ")[0]}</div>
                    </div>
                  );
                })}
              </div>
            </div>
          </div>

          <div className="rep-legend">
            <span><span className="legend__dot" style={{background:"var(--accent)"}}/> Tahsil</span>
            <span><span className="legend__dot" style={{background:"var(--accent)", opacity:0.27}}/> Bekleyen</span>
          </div>
        </Card>

        <Card padding={24}>
          <h3 className="card-title">Hızlı özet</h3>
          <p className="card-sub">Tüm zamanlar</p>
          <ul className="rep-summary">
            <li><span>Toplam hakediş</span><b className="num">{fmtTRY(totalEarned)}</b></li>
            <li><span>Tamamlanan seans</span><b className="num">{allDone.length}</b></li>
            <li><span>Tamamlanan hasta</span><b className="num">{data.PATIENTS.filter(p=>p.status==="Tamamlandı").length}</b></li>
            <li><span>Aktif tedavi</span><b className="num">{data.PATIENTS.filter(p=>p.status==="Devam ediyor").length}</b></li>
            <li><span>Ort. seans ücreti</span><b className="num">{fmtTRY(avgFee)}</b></li>
            <li><span>Ort. hakediş oranı</span><b className="num">%{avgShare}</b></li>
          </ul>
        </Card>
      </div>

      <Card padding={24}>
        <div className="card-head">
          <div>
            <h3 className="card-title">Rapor şablonları</h3>
            <p className="card-sub">Excel formatında indir</p>
          </div>
        </div>
        <div className="rep-grid">
          {reportTemplates.map(r => (
            <div key={r.id} className="rep-card">
              <div className="rep-card__icon"><I.Document size={20}/></div>
              <div className="rep-card__main">
                <h4 className="rep-card__title">{r.title}</h4>
                <p className="rep-card__desc">{r.desc}</p>
                <div className="rep-card__meta">
                  <Tag color="neutral">Excel</Tag>
                </div>
              </div>
              <button className="btn btn--ghost btn--sm icon-only" onClick={exports[r.id]} title="İndir">
                <I.Export size={15}/>
              </button>
            </div>
          ))}
        </div>
      </Card>
    </div>
  );
}

// ──── PLACEHOLDER ────
function Placeholder({ title, desc }) {
  const I = window.DentIcons;
  return (
    <div className="view">
      <div className="page-head">
        <div>
          <h1 className="page-title">{title}</h1>
          <p className="page-sub">{desc}</p>
        </div>
      </div>
      <div className="placeholder">
        <I.Sparkle size={28}/>
        <p>Bu modül yakında geliyor. Bekleme listesine eklemek için iletişime geç.</p>
      </div>
    </div>
  );
}

// ──── SETTINGS ────
function Settings({ tweaks, setTweak, data }) {
  const { Card } = window.DentUI;
  const I = window.DentIcons;

  const [form, setForm] = React.useState(() => {
    try { return JSON.parse(localStorage.getItem("DentSide_account") || "{}"); } catch(e) { return {}; }
  });
  const [saved, setSaved] = React.useState(false);
  const [notifs, setNotifs] = React.useState(() => {
    try { return JSON.parse(localStorage.getItem("DentSide_notifs") || "{}"); } catch(e) { return {}; }
  });

  const setF = (k, v) => setForm(f => ({ ...f, [k]: v }));

  const saveAccount = () => {
    localStorage.setItem("DentSide_account", JSON.stringify(form));
    setSaved(true);
    setTimeout(() => setSaved(false), 2000);
  };


  const toggleNotif = (key) => {
    const next = { ...notifs, [key]: !notifs[key] };
    setNotifs(next);
    localStorage.setItem("DentSide_notifs", JSON.stringify(next));
  };

  const exportAll = () => {
    const wb = XLSX.utils.book_new();
    const mkS = (rows, ws) => { const s = XLSX.utils.aoa_to_sheet(rows); s["!cols"] = ws.map(w=>({wch:w})); return s; };
    const s1 = [["Klinik","Hakediş %","Aktif Hasta"]];
    data.CLINICS.forEach(c => {
      const active = data.PATIENTS.filter(p => p.clinicId === c.id && p.status === "Devam ediyor").length;
      s1.push([c.name, c.share||50, active]);
    });
    XLSX.utils.book_append_sheet(wb, mkS(s1,[22,14,14]), "Klinikler");
    const s2 = [["Hasta","Klinik","Tedavi","Toplam (₺)","Ödenen (₺)","Bakiye (₺)","Durum"]];
    data.PATIENTS.forEach(p => {
      const c = data.CLINICS.find(cc => cc.id === p.clinicId);
      s2.push([p.name, c?.name||"", p.treatment||"", p.totalFee||0, p.paid||0, p.balance||0, p.status||""]);
    });
    XLSX.utils.book_append_sheet(wb, mkS(s2,[22,22,28,14,14,14,14]), "Hastalar");
    XLSX.writeFile(wb, `DentSide_TamVeri_${new Date().toISOString().slice(0,10)}.xlsx`);
  };

  const PALETTE_OPTS = [
    { value:"blue", label:"Klinik Mavi" }, { value:"teal", label:"Teal" },
    { value:"indigo", label:"Indigo" }, { value:"forest", label:"Forest" },
  ];

  const NOTIF_ITEMS = [
    { key:"apptReminder",  label:"Randevu hatırlatıcısı",    desc:"Randevudan 1 saat önce bildirim" },
    { key:"paymentAlert",  label:"Ödeme bildirimi",           desc:"Yeni ödeme alındığında bildir" },
    { key:"pendingAlert",  label:"Bekleyen alacak uyarısı",   desc:"30 günden eski bekleyen alacaklar" },
    { key:"newPatient",    label:"Yeni hasta bildirimi",       desc:"Sisteme yeni hasta eklendiğinde" },
  ];

  return (
    <div className="view">
      <div className="page-head">
        <div>
          <h1 className="page-title">Tercihler</h1>
          <p className="page-sub">Hesap bilgileri, görünüm ve bildirim ayarları.</p>
        </div>
      </div>

      <div className="settings-layout">

        {/* Hesap */}
        <Card padding={24}>
          <h3 className="card-title">Hesap</h3>
          <p className="card-sub">Hekim profil bilgileri</p>
          <div className="settings-form">
            <div className="form-row">
              <div className="form-field">
                <label>Ad Soyad</label>
                <input value={form.name||""} onChange={e=>setF("name",e.target.value)} placeholder="Dr. Ad Soyad"/>
              </div>
              <div className="form-field">
                <label>Uzmanlık</label>
                <input value={form.specialty||""} onChange={e=>setF("specialty",e.target.value)} placeholder="Diş Hekimi"/>
              </div>
            </div>
            <div className="form-row">
              <div className="form-field">
                <label>E-posta</label>
                <input type="email" value={form.email||""} onChange={e=>setF("email",e.target.value)} placeholder="hekim@example.com"/>
              </div>
              <div className="form-field">
                <label>Telefon</label>
                <input value={form.phone||""} onChange={e=>setF("phone",e.target.value)} placeholder="+90 5xx xxx xx xx"/>
              </div>
            </div>
            <div className="settings-form__foot">
              <button className="btn btn--accent" onClick={saveAccount}>
                {saved ? "✓ Kaydedildi" : "Kaydet"}
              </button>
            </div>
          </div>
        </Card>

        {/* Görünüm */}
        <Card padding={24}>
          <h3 className="card-title">Görünüm</h3>
          <p className="card-sub">Tema ve yoğunluk tercihleri</p>
          <div className="settings-pref-list">
            <div className="settings-pref">
              <div className="settings-pref__label">Dil</div>
              <div className="radio-group">
                <button type="button" className={`radio-opt ${tweaks.lang==="tr"?"is-on":""}`} onClick={()=>setTweak("lang","tr")}>Türkçe</button>
                <button type="button" className={`radio-opt ${tweaks.lang==="en"?"is-on":""}`} onClick={()=>setTweak("lang","en")}>English</button>
              </div>
            </div>
            <div className="settings-pref">
              <div className="settings-pref__label">Sidebar teması</div>
              <div className="radio-group">
                <button type="button" className={`radio-opt ${tweaks.sidebarTheme==="dark"?"is-on":""}`} onClick={()=>setTweak("sidebarTheme","dark")}>Koyu</button>
                <button type="button" className={`radio-opt ${tweaks.sidebarTheme==="light"?"is-on":""}`} onClick={()=>setTweak("sidebarTheme","light")}>Açık</button>
              </div>
            </div>
            <div className="settings-pref">
              <div className="settings-pref__label">Yoğunluk</div>
              <div className="radio-group">
                <button type="button" className={`radio-opt ${tweaks.density==="comfortable"?"is-on":""}`} onClick={()=>setTweak("density","comfortable")}>Normal</button>
                <button type="button" className={`radio-opt ${tweaks.density==="compact"?"is-on":""}`} onClick={()=>setTweak("density","compact")}>Yoğun</button>
              </div>
            </div>
            <div className="settings-pref">
              <div className="settings-pref__label">Renk paleti</div>
              <div className="radio-group">
                {PALETTE_OPTS.map(p => (
                  <button key={p.value} type="button" className={`radio-opt ${tweaks.palette===p.value?"is-on":""}`} onClick={()=>setTweak("palette",p.value)}>{p.label}</button>
                ))}
              </div>
            </div>
          </div>
        </Card>

        {/* Bildirimler */}
        <Card padding={24}>
          <h3 className="card-title">Bildirimler</h3>
          <p className="card-sub">Uygulama içi bildirim tercihleri</p>
          <div className="settings-pref-list">
            {NOTIF_ITEMS.map(n => (
              <div key={n.key} className="settings-pref">
                <div>
                  <div className="settings-pref__label">{n.label}</div>
                  <div className="settings-pref__desc">{n.desc}</div>
                </div>
                <button className={`toggle-btn ${notifs[n.key]?"is-on":""}`} onClick={()=>toggleNotif(n.key)}>
                  <span className="toggle-thumb"/>
                </button>
              </div>
            ))}
          </div>
        </Card>

        {/* Veri yönetimi */}
        <Card padding={24}>
          <h3 className="card-title">Veri Yönetimi</h3>
          <p className="card-sub">Dışa aktarma ve sıfırlama</p>
          <div className="settings-pref-list">
            <div className="settings-pref">
              <div>
                <div className="settings-pref__label">Tüm verileri dışa aktar</div>
                <div className="settings-pref__desc">Hasta ve klinik verilerini Excel'e aktar</div>
              </div>
              <button className="btn btn--ghost btn--sm" onClick={exportAll}><I.Export size={14}/> Excel</button>
            </div>
            <div className="settings-pref">
              <div>
                <div className="settings-pref__label" style={{color:"var(--coral)"}}>Görünüm ayarlarını sıfırla</div>
                <div className="settings-pref__desc">Dil, tema ve renk ayarlarını varsayılana döndür</div>
              </div>
              <button className="btn btn--ghost btn--sm" style={{color:"var(--coral)",borderColor:"var(--coral)"}} onClick={()=>{
                if (confirm("Görünüm tercihleri sıfırlansın mı?")) {
                  setTweak("lang","tr"); setTweak("sidebarTheme","dark");
                  setTweak("palette","blue"); setTweak("density","comfortable");
                }
              }}>Sıfırla</button>
            </div>
          </div>
        </Card>

      </div>
    </div>
  );
}

// ──── HELP ────
function Help() {
  const { Card } = window.DentUI;
  const [openFaq, setOpenFaq] = React.useState(null);

  const steps = [
    { num:1, icon:"🏥", title:"Klinik ekle",         desc:"Sol menüden Klinikler'e gir, Klinik Ekle butonuna tıkla. Klinik adı, şehir ve hakediş oranını gir." },
    { num:2, icon:"👤", title:"Hasta ekle",           desc:"Hastalar sekmesine geç ve Yeni Hasta butonuna tıkla. Ad, yaş, telefon ve tedavi kategorisini seç." },
    { num:3, icon:"📋", title:"Tedavi planı oluştur", desc:"Hasta kaydını aç, Tedavi Planı sekmesine geç, seansları ekle ve ücretleri belirle." },
    { num:4, icon:"📅", title:"Randevu oluştur",      desc:"Takvim bölümünden gün, hafta veya ay görünümünü seç ve Yeni Randevu butonuna tıkla." },
    { num:5, icon:"💰", title:"Ödeme kaydet",          desc:"Hasta kaydını aç, Ödemeler sekmesine geç ve ödemeyi ekle." },
    { num:6, icon:"📊", title:"Rapor al",              desc:"Raporlar bölümünden istediğin şablonun indirme butonuna tıkla veya Toplu İndir butonunu kullan." },
  ];

  const faqs = [
    { q:"Excel ile hasta nasıl içe aktarılır?",
      a:"Hastalar sayfasında İçe Aktar butonuna tıkla. Şablon dosyasını indir, doldur (ad, yaş, cinsiyet, telefon, klinik adı) ve yükle. Sistemde olmayan klinik adları otomatik oluşturulur." },
    { q:"Klinik hakediş oranı nasıl değiştirilir?",
      a:"Klinikler sekmesine gir, ilgili kliniğin kalem ikonuna tıkla. Sözleşme tipi ve hakediş oranını güncelle, kaydet." },
    { q:"Randevuya kayıtsız hasta nasıl eklenir?",
      a:"Takvim'de yeni randevu oluştururken Yeni Hasta seçeneğini işaretle. Sadece isim yazman yeterli, kayıt oluşturulmaz." },
    { q:"Ödeme 'Bekliyor' olarak görünüyor, neden?",
      a:"Tamamlanan seans ücretleri hastanın toplam ödemesiyle sırayla karşılaştırılır. Ödenen tutar seans ücretini karşılamıyorsa Bekliyor olarak görünür." },
    { q:"Birden fazla klinikle çalışıyorum, nasıl yönetirim?",
      a:"Her klinik için Klinikler bölümünde ayrı kayıt oluştur. Hastalara klinik ataması yap; raporlar ve finans bölümü otomatik olarak klinik bazında ayırır." },
    { q:"Verilerimi kaybeder miyim?",
      a:"Veriler tarayıcı belleğinde tutulur; sayfayı kapatınca sıfırlanır. Tercihler - Veri Yönetimi bölümünden veya Raporlar bölümünden düzenli Excel yedek alman önerilir." },
  ];

  const changelog = [
    { version:"1.5", date:"May 2026", changes:["Tercihler sayfası: hesap, görünüm, bildirimler, veri yönetimi", "Yardım Merkezi: hızlı başlangıç, SSS, sürüm notları", "Raporlar: Y-eksenli grafik ve 6 çalışan Excel şablonu"] },
    { version:"1.4", date:"May 2026", changes:["Finans: hem seanslar hem doğrudan ödemeler listeleniyor", "Raporlar bölümü yeniden yazıldı"] },
    { version:"1.3", date:"May 2026", changes:["Klinik düzenleme ve silme eklendi", "Klinik liste görünümü düzeltildi", "Takvim Gün/Hafta/Ay görünümleri yeniden yazıldı"] },
    { version:"1.2", date:"May 2026", changes:["Excel import: bilinmeyen klinikler otomatik oluşturuluyor", "Finans filtre paneli ve 3 sayfalı Excel export"] },
    { version:"1.1", date:"May 2026", changes:["Randevuya 'Yeni Hasta' modu", "Klinik ekleme modalı (sözleşme tipleri)", "Duplicate klinik bug'ı düzeltildi"] },
    { version:"1.0", date:"May 2026", changes:["İlk sürüm: Dashboard, Hastalar, Klinikler, Finans, Takvim, Tedaviler, Raporlar"] },
  ];

  return (
    <div className="view">
      <div className="page-head">
        <div>
          <h1 className="page-title">Yardım Merkezi</h1>
          <p className="page-sub">Hızlı başlangıç rehberi, sık sorulan sorular ve sürüm notları.</p>
        </div>
      </div>

      <div style={{marginBottom:18}}>
      <Card padding={24}>
        <h3 className="card-title">Hızlı Başlangıç</h3>
        <p className="card-sub">DentSide'u kullanmaya başlamak için 6 adım</p>
        <div className="help-steps">
          {steps.map(s => (
            <div key={s.num} className="help-step">
              <div className="help-step__num">{s.num}</div>
              <div className="help-step__icon">{s.icon}</div>
              <div className="help-step__title">{s.title}</div>
              <div className="help-step__desc">{s.desc}</div>
            </div>
          ))}
        </div>
      </Card>
      </div>

      <div className="help-bottom">
        <Card padding={24}>
          <h3 className="card-title">Sık Sorulan Sorular</h3>
          <div className="faq-list">
            {faqs.map((f, i) => (
              <div key={i} className={`faq-item ${openFaq===i?"is-open":""}`}>
                <button className="faq-q" onClick={()=>setOpenFaq(openFaq===i?null:i)}>
                  <span>{f.q}</span>
                  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round"><polyline points="6 9 12 15 18 9"/></svg>
                </button>
                {openFaq===i && <div className="faq-a">{f.a}</div>}
              </div>
            ))}
          </div>
        </Card>

        <Card padding={24}>
          <h3 className="card-title">Sürüm Notları</h3>
          <div className="changelog-list">
            {changelog.map(c => (
              <div key={c.version} className="changelog-item">
                <div className="changelog-head">
                  <span className="changelog-ver">v{c.version}</span>
                  <span className="changelog-date">{c.date}</span>
                </div>
                <ul className="changelog-changes">
                  {c.changes.map((ch,i) => <li key={i}>{ch}</li>)}
                </ul>
              </div>
            ))}
          </div>
        </Card>
      </div>
    </div>
  );
}

function Stock({ data }) {
  const { Card, fmtDate } = window.DentUI;
  const I = window.DentIcons;
  const XLSX = window.XLSX;

  const initStock = () => {
    try { return JSON.parse(localStorage.getItem("ds_stock")) || (data.STOCK || []); } catch(e) { return data.STOCK || []; }
  };

  const [records, setRecords] = React.useState(initStock);
  const [firmaFilter, setFirmaFilter] = React.useState("all");
  const [showAdd, setShowAdd] = React.useState(false);
  const [addTip, setAddTip] = React.useState("siparis");

  const EMPTY = { firma:"", malzeme:"", adet:"1", siparisTarihi:"", birimFiyat:"", birim:"TRY", kimeYapildi:"", nerdenOdendi:"", odemeTarihi:"", yapilanOdeme:"" };
  const [form, setForm] = React.useState(EMPTY);
  const set = (k, v) => setForm(f => ({ ...f, [k]: v }));

  const saveRecords = (list) => { setRecords(list); localStorage.setItem("ds_stock", JSON.stringify(list)); };

  const firmalar = [...new Set(records.map(r => r.firma).filter(Boolean))];
  const filtered = firmaFilter === "all" ? records : records.filter(r => r.firma === firmaFilter);

  const fmtN = (n, birim) => n != null ? `${Number(n).toLocaleString("tr-TR")} ${birim || ""}`.trim() : "—";

  const tryTutar = records.filter(r => r.tip === "siparis" && r.birim === "TRY").reduce((a, r) => a + (r.tutar || 0), 0);
  const usdTutar = records.filter(r => r.tip === "siparis" && r.birim === "USD").reduce((a, r) => a + (r.tutar || 0), 0);
  const tryOdeme = records.filter(r => r.tip === "odeme" && r.yapilanOdeme > 0).reduce((a, r) => a + r.yapilanOdeme, 0);

  const handleAdd = (e) => {
    e.preventDefault();
    const adet = parseFloat(form.adet) || 0;
    const birimFiyat = parseFloat(form.birimFiyat) || 0;
    const newRec = {
      id: "stk_" + Date.now(),
      tip: addTip,
      firma: form.firma,
      malzeme: form.malzeme,
      adet: addTip === "siparis" ? adet : null,
      siparisTarihi: form.siparisTarihi,
      birimFiyat: addTip === "siparis" ? birimFiyat : null,
      tutar: addTip === "siparis" ? adet * birimFiyat : null,
      birim: form.birim,
      kimeYapildi: form.kimeYapildi,
      nerdenOdendi: form.nerdenOdendi,
      odemeTarihi: form.odemeTarihi,
      yapilanOdeme: addTip === "odeme" ? (parseFloat(form.yapilanOdeme) || 0) : 0,
    };
    saveRecords([...records, newRec]);
    setForm(EMPTY);
    setShowAdd(false);
  };

  const handleDelete = (id) => { if (confirm("Kayıt silinsin mi?")) saveRecords(records.filter(r => r.id !== id)); };

  const handleExport = () => {
    const rows = [
      ["Firma","Malzeme","Adet","Sipariş Tarihi","Birim Fiyat","Tutar","Birim","Kime yapıldı","Nereden ödendi","Ödeme Tarihi","Yapılan Ödeme"],
      ...records.map(r => [r.firma,r.malzeme,r.adet ?? "",r.siparisTarihi,r.birimFiyat ?? "",r.tutar ?? "",r.birim,r.kimeYapildi,r.nerdenOdendi,r.odemeTarihi,r.yapilanOdeme || ""]),
    ];
    const ws = XLSX.utils.aoa_to_sheet(rows);
    ws["!cols"] = [24,32,6,14,12,12,7,22,16,14,14].map(w => ({ wch: w }));
    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, "Stok");
    XLSX.writeFile(wb, `DentSide_Stok_${new Date().toISOString().slice(0,10)}.xlsx`);
  };

  return (
    <div className="view">
      <div className="page-head">
        <div>
          <h1 className="page-title">Stok &amp; Malzeme</h1>
          <p className="page-sub">{records.length} kayıt &middot; {firmalar.length} tedarikçi</p>
        </div>
        <div className="page-actions">
          <button className="btn btn--ghost" onClick={handleExport}><I.Export size={15}/>Excel</button>
          <button className="btn btn--accent" onClick={() => setShowAdd(v => !v)}><I.Plus size={15}/>{showAdd ? "İptal" : "Yeni Kayıt"}</button>
        </div>
      </div>

      <div className="kpi-grid" style={{marginBottom:20}}>
        <div className="kpi">
          <div className="kpi__head">
            <span className="kpi__label">TRY Siparişler</span>
          </div>
          <div className="kpi__value-row">
            <span className="kpi__value">{tryTutar.toLocaleString("tr-TR")}<span className="kpi__unit">₺</span></span>
          </div>
        </div>
        <div className="kpi">
          <div className="kpi__head">
            <span className="kpi__label">USD Siparişler</span>
          </div>
          <div className="kpi__value-row">
            <span className="kpi__value">${usdTutar.toLocaleString("tr-TR")}</span>
          </div>
        </div>
        <div className="kpi">
          <div className="kpi__head">
            <span className="kpi__label">TRY Ödenen</span>
          </div>
          <div className="kpi__value-row">
            <span className="kpi__value" style={{color:"var(--mint)"}}>{tryOdeme.toLocaleString("tr-TR")}<span className="kpi__unit">₺</span></span>
          </div>
        </div>
        <div className="kpi">
          <div className="kpi__head">
            <span className="kpi__label">Tedarikçiler</span>
          </div>
          <div className="kpi__value-row">
            <span className="kpi__value">{firmalar.length}</span>
          </div>
        </div>
      </div>

      {showAdd && (
        <Card style={{marginBottom:20}}>
          <div className="seg" style={{marginBottom:14}}>
            <button className={`seg__opt ${addTip === "siparis" ? "is-on" : ""}`} onClick={() => setAddTip("siparis")}>Sipariş / Malzeme</button>
            <button className={`seg__opt ${addTip === "odeme" ? "is-on" : ""}`} onClick={() => setAddTip("odeme")}>Ödeme / Ayarlama</button>
          </div>
          <form onSubmit={handleAdd} className="inline-form">
            <div className="form-row">
              <div className="form-field">
                <label>Firma *</label>
                <input value={form.firma} onChange={e => set("firma", e.target.value)} required list="stk-firma-list"/>
                <datalist id="stk-firma-list">{firmalar.map(f => <option key={f} value={f}/>)}</datalist>
              </div>
              <div className="form-field">
                <label>Malzeme / Açıklama</label>
                <input value={form.malzeme} onChange={e => set("malzeme", e.target.value)}/>
              </div>
            </div>
            {addTip === "siparis" && (
              <div className="form-row">
                <div className="form-field">
                  <label>Adet</label>
                  <input type="number" min="0" value={form.adet} onChange={e => set("adet", e.target.value)}/>
                </div>
                <div className="form-field">
                  <label>Birim Fiyat</label>
                  <input type="number" min="0" value={form.birimFiyat} onChange={e => set("birimFiyat", e.target.value)}/>
                </div>
                <div className="form-field">
                  <label>Para Birimi</label>
                  <select value={form.birim} onChange={e => set("birim", e.target.value)}>
                    <option value="TRY">TRY</option>
                    <option value="USD">USD</option>
                    <option value="EUR">EUR</option>
                  </select>
                </div>
                <div className="form-field">
                  <label>Sipariş Tarihi</label>
                  <input type="date" value={form.siparisTarihi} onChange={e => set("siparisTarihi", e.target.value)}/>
                </div>
              </div>
            )}
            {addTip === "odeme" && (
              <div className="form-row">
                <div className="form-field">
                  <label>Tutar</label>
                  <input type="number" value={form.yapilanOdeme} onChange={e => set("yapilanOdeme", e.target.value)}/>
                </div>
                <div className="form-field">
                  <label>Kime yapıldı</label>
                  <input value={form.kimeYapildi} onChange={e => set("kimeYapildi", e.target.value)}/>
                </div>
                <div className="form-field">
                  <label>Nereden ödendi</label>
                  <input value={form.nerdenOdendi} onChange={e => set("nerdenOdendi", e.target.value)}/>
                </div>
                <div className="form-field">
                  <label>Ödeme Tarihi</label>
                  <input type="date" value={form.odemeTarihi} onChange={e => set("odemeTarihi", e.target.value)}/>
                </div>
              </div>
            )}
            <div style={{display:"flex",gap:8,justifyContent:"flex-end",marginTop:4}}>
              <button type="button" className="btn btn--ghost btn--sm" onClick={() => setShowAdd(false)}>İptal</button>
              <button type="submit" className="btn btn--accent btn--sm">Kaydet</button>
            </div>
          </form>
        </Card>
      )}

      <div className="chips" style={{marginBottom:16}}>
        <button className={`chip ${firmaFilter === "all" ? "is-on" : ""}`} onClick={() => setFirmaFilter("all")}>
          Tümü <span className="chip-count">{records.length}</span>
        </button>
        {firmalar.map(f => (
          <button key={f} className={`chip ${firmaFilter === f ? "is-on" : ""}`} onClick={() => setFirmaFilter(f)}>
            {f} <span className="chip-count">{records.filter(r => r.firma === f).length}</span>
          </button>
        ))}
      </div>

      <Card style={{padding:0,overflow:"hidden"}}>
        <div style={{overflowX:"auto"}}>
          <div className="stock-table">
            <div className="stock-row stock-row--head">
              <span>Firma</span>
              <span>Malzeme</span>
              <span>Adet</span>
              <span>Sipariş Tarihi</span>
              <span>Birim Fiyat</span>
              <span>Tutar</span>
              <span>Kime / Nereden</span>
              <span>Ödeme Tarihi</span>
              <span>Yapılan Ödeme</span>
              <span></span>
            </div>
            {filtered.length === 0 && (
              <div style={{padding:"32px 24px",textAlign:"center",color:"var(--text-mute)",fontSize:13}}>
                Kayıt bulunamadı.
              </div>
            )}
            {filtered.map(r => (
              <div key={r.id} className={`stock-row ${r.tip === "odeme" ? "stock-row--odeme" : ""}`}>
                <span className="stock-firma">{r.firma}</span>
                <span className="stock-malzeme">{r.malzeme}</span>
                <span className="muted">{r.adet != null ? r.adet : "—"}</span>
                <span className="muted">{r.siparisTarihi ? fmtDate(r.siparisTarihi) : "—"}</span>
                <span className="num">{r.birimFiyat != null ? fmtN(r.birimFiyat, r.birim) : "—"}</span>
                <span className="num">{r.tutar != null ? fmtN(r.tutar, r.birim) : "—"}</span>
                <span style={{fontSize:12}}>
                  {r.kimeYapildi && <div>{r.kimeYapildi}</div>}
                  {r.nerdenOdendi && <div style={{color:"var(--accent)",fontSize:11}}>{r.nerdenOdendi}</div>}
                  {!r.kimeYapildi && !r.nerdenOdendi && <span className="muted">—</span>}
                </span>
                <span className="muted">{r.odemeTarihi ? fmtDate(r.odemeTarihi) : "—"}</span>
                <span className="num" style={{color: r.yapilanOdeme > 0 ? "var(--mint)" : r.yapilanOdeme < 0 ? "var(--coral)" : "var(--text-mute)", fontWeight: r.yapilanOdeme ? 600 : 400}}>
                  {r.yapilanOdeme ? r.yapilanOdeme.toLocaleString("tr-TR") : "—"}
                </span>
                <span>
                  <button className="icon-btn" style={{color:"var(--coral)"}} onClick={() => handleDelete(r.id)}>
                    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round"><polyline points="3 6 5 6 21 6"/><path d="M19 6l-1 14H6L5 6"/></svg>
                  </button>
                </span>
              </div>
            ))}
          </div>
        </div>
      </Card>
    </div>
  );
}

window.DentViews = { Clinics: window._dsClinic, Finance: window._dsFinance, Schedule: window._dsSchedule, Treatments: window._dsTreatments, Reports, Settings, Help, Stock, Placeholder };
