// แยกชื่อผู้ขายกับเบอร์โทรจากข้อความเดิม (เผื่อข้อมูลเก่าที่บันทึกรวมกัน)
function splitSeller(seller, phone) {
  if (phone != null && phone !== "") return { name: (seller || "").trim(), phone };
  const s = (seller || "").trim();
  const m = s.match(/[0-9].*$/);
  if (!m) return { name: s, phone: "" };
  if (m.index === 0) return { name: "", phone: s };
  return { name: s.slice(0, m.index).trim(), phone: m[0].trim() };
}

// หน้ารับซื้อ / รับเทิร์นเครื่อง / รับซื้อ Notebook
function BuyinPage({ ui, user }) {
  const { st, dispatch } = useStore();
  const toast = useToast();
  const branch = ui.branch === "ALL" ? (user.branch || "B1") : ui.branch;
  const [showForm, setShowForm] = React.useState(false);
  const [accept, setAccept] = React.useState(null);
  const [detail, setDetail] = React.useState(null);   // รายการที่กำลังดู
  const [ed, setEd] = React.useState(null);           // ฟอร์มแก้ไข
  const [editing, setEditing] = React.useState(false);
  const [lb, setLb] = React.useState({ imgs: [], i: null });
  const [bcTarget, setBcTarget] = React.useState(null);   // ป้ายบาร์โค้ดที่จะพิมพ์
  const canManage = user.role === "owner" || user.role === "manager";
  const [f, setF] = React.useState({ kind: "รับซื้อ", brand: "Apple", brandOther: "", device: "", color: "", storage: "", storageOther: "", imei: "", battery: "", cond: "", price: "", seller: "", sellerPhone: "", sellerCard: "", img: null, imgs: [], imgCard: null, nbBrand: "Apple", nbModel: "", nbCPU: "", nbRAM: "", nbStorage: "", nbCond: "ปกติ", nbSerial: "", nbPrice: "", nbSeller: "", nbSellerPhone: "", nbSellerCard: "", nbNote: "" });
  const [acc, setAcc] = React.useState({ price: "", locId: "" });
  const [bq, setBq] = React.useState("");

  const list = st.buyins.filter((b) => (ui.branch === "ALL" || b.branch === ui.branch)
    && (bq.trim() === "" || `${b.id} ${b.device || ""} ${b.brand || ""} ${b.imei || ""} ${b.seller || ""} ${b.sellerPhone || ""} ${b.color || ""} ${b.storage || ""} ${b.kind || ""}`.toLowerCase().includes(bq.trim().toLowerCase())));
  const set = (k) => (v) => setF((x) => ({ ...x, [k]: v }));
  const setE = (k) => (e) => setF((x) => ({ ...x, [k]: e.target.value }));

  const submit = () => {
    if (f.kind === "Notebook/MacBook") {
      if (!f.nbModel || !f.nbPrice || !f.nbSeller) { toast("กรอกรุ่น ราคา และผู้ขายให้ครบ", "danger"); return; }
      dispatch({ type: "BUYIN_ADD", buyin: { kind: "Notebook/MacBook", brand: f.nbBrand, device: f.nbModel, cond: `CPU: ${f.nbCPU} · RAM: ${f.nbRAM} · Storage: ${f.nbStorage} · ${f.nbCond}${f.nbNote ? " · " + f.nbNote : ""}`, imei: "", battery: "", price: Number(f.nbPrice), seller: f.nbSeller, sellerPhone: f.nbSellerPhone, sellerCard: f.nbSellerCard, img: (f.imgs && f.imgs[0]) || null, imgs: f.imgs, imgCard: f.imgCard, branch, by: user.id } });
      toast("บันทึกการรับซื้อ Notebook เรียบร้อย");
    } else {
      if (!f.device || !f.price || !f.seller) { toast("กรอกข้อมูลเครื่อง ราคา และผู้ขายให้ครบ", "danger"); return; }
      const brand = f.brand === "อื่นๆ" ? (f.brandOther || "อื่นๆ") : f.brand;
      const storage = f.storage === "อื่นๆ" ? (f.storageOther || "") : f.storage;
      dispatch({ type: "BUYIN_ADD", buyin: { ...f, brand, storage, price: Number(f.price), img: (f.imgs && f.imgs[0]) || null, branch, by: user.id } });
      toast(`บันทึกการ${f.kind}เรียบร้อย`);
    }
    setShowForm(false);
    setF({ kind: "รับซื้อ", brand: "Apple", brandOther: "", device: "", color: "", storage: "", storageOther: "", imei: "", battery: "", cond: "", price: "", seller: "", sellerPhone: "", sellerCard: "", img: null, imgs: [], imgCard: null, nbBrand: "Apple", nbModel: "", nbCPU: "", nbRAM: "", nbStorage: "", nbCond: "ปกติ", nbSerial: "", nbPrice: "", nbSeller: "", nbSellerPhone: "", nbSellerCard: "", nbNote: "" });
  };

  const doAccept = () => {
    if (!acc.price || !acc.locId) { toast("กำหนดราคาขายและ Location ก่อน", "danger"); return; }
    dispatch({ type: "BUYIN_ACCEPT", id: accept.id, price: Number(acc.price), wprice: acc.wprice === "" || acc.wprice == null ? null : Number(acc.wprice), locId: acc.locId, cat: acc.cat, by: user.id });
    toast(`รับ ${accept.device} เข้าสต็อกแล้ว`);
    setAccept(null);
  };

  const showLocs = st.locations.filter((l) => l.branch === (accept ? accept.branch : branch));

  const splitEd = (b) => { const sp = splitSeller(b.seller, b.sellerPhone); return { ...b, seller: sp.name, sellerPhone: sp.phone, imgs: b.imgs && b.imgs.length ? b.imgs : (b.img ? [b.img] : []) }; };
  const openDetail = (b) => { setDetail(b); setEd(splitEd(b)); setEditing(false); };
  const saveEdit = () => {
    if (!ed.device || ed.price === "" || ed.price == null || !ed.seller) { toast("กรอกข้อมูลเครื่อง ราคา และผู้ขายให้ครบ", "danger"); return; }
    const patch = { kind: ed.kind, brand: ed.brand, device: ed.device, color: ed.color, storage: ed.storage, imei: ed.imei, battery: ed.battery, price: Number(ed.price), cond: ed.cond, seller: ed.seller, sellerPhone: ed.sellerPhone, sellerCard: ed.sellerCard, img: (ed.imgs && ed.imgs[0]) || ed.img || null, imgs: ed.imgs || (ed.img ? [ed.img] : []), imgCard: ed.imgCard };
    dispatch({ type: "BUYIN_SET", id: detail.id, patch });
    toast("บันทึกการแก้ไขเรียบร้อย");
    setDetail({ ...detail, ...patch }); setEditing(false);
  };
  const delBuyin = () => {
    if (!confirm(`ลบรายการ ${detail.id} (${detail.device})?`)) return;
    dispatch({ type: "BUYIN_DEL", id: detail.id });
    toast("ลบรายการเรียบร้อย", "info");
    setDetail(null);
  };
  const edE = (k) => (e) => setEd((x) => ({ ...x, [k]: e.target.value }));
  const edV = (k) => (v) => setEd((x) => ({ ...x, [k]: v }));
  const printBarcode = () => setBcTarget({
    name: `${detail.brand ? detail.brand + " " : ""}${detail.device}`,
    barcode: detail.imei || detail.id,
    sku: detail.id,
    price: detail.price,
  });
  const Row = ({ label, children }) => (
    <div style={{ display: "flex", gap: 10, fontSize: 13, padding: "8px 0", borderBottom: `1px solid ${T.rowBorder}`, alignItems: "baseline" }}>
      <span style={{ color: T.sub, minWidth: 132, fontWeight: 600 }}>{label}</span>
      <span style={{ flex: 1, fontWeight: 600, wordBreak: "break-word" }}>{children || "—"}</span>
    </div>
  );

  return (
    <div style={{ display: "flex", flexDirection: "column", gap: 14 }}>
      <div style={{ display: "flex", gap: 10, alignItems: "center" }}>
        <div style={{ fontSize: 13, color: T.sub, whiteSpace: "nowrap" }}>รับซื้อ/รับเทิร์น {list.length} รายการ</div>
        <div style={{ flex: 1, minWidth: 200 }}><SearchBox value={bq} onChange={setBq} placeholder="ค้นหา — เลขที่ BI / รุ่น / ยี่ห้อ / IMEI / ชื่อผู้ขาย / เบอร์…" /></div>
        <Btn onClick={() => setShowForm(true)}>⊕ รับซื้อ / รับเทิร์นเครื่อง</Btn>
      </div>

      <div style={{ display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(330px, 1fr))", gap: 13 }}>
        {list.map((b, i) => { const soldProd = st.products.find((p) => (p.name || "").includes(b.id)); const sold = b.status === "รับเข้าสต็อกแล้ว" && soldProd && stockTotal(soldProd) === 0; return (
          <Card key={b.id} hover onClick={() => openDetail(b)} style={{ padding: 16, cursor: "pointer", animation: `ss-rise .4s ${i * 50}ms ease backwards` }}>
            <div style={{ display: "flex", gap: 12 }}>
              <ProductImg p={{ img: b.img, cat: "เครื่อง" }} size={56} radius={12} />
              <div style={{ minWidth: 0, flex: 1 }}>
                <div style={{ display: "flex", gap: 8, alignItems: "center" }}>
                  <span style={{ fontWeight: 700, color: T.primary, fontSize: 12.5 }}>{b.id}</span>
                  <Badge sm tone={b.kind === "รับเทิร์น" ? "info" : "muted"}>{b.kind}</Badge>
                  <span style={{ marginLeft: "auto" }}><Badge sm tone={b.status === "รอตรวจสภาพ" ? "warn" : "ok"}>{b.status}</Badge></span>
                </div>
                <div style={{ fontFamily: T.headFont, fontWeight: 700, fontSize: 15, margin: "3px 0 1px" }}>{b.brand ? b.brand + " · " : ""}{b.device}</div>
                <div style={{ fontSize: 11, color: T.sub, fontFamily: "monospace" }}>IMEI: {b.imei || "—"}</div>
              </div>
            </div>
            <div style={{ fontSize: 12, color: T.sub, margin: "10px 0 8px", lineHeight: 1.5 }}>{b.battery ? `🔋 แบต ${b.battery}% · ` : ""}{b.cond}</div>
            <div style={{ display: "flex", alignItems: "center", gap: 8, fontSize: 12 }}>
              <Avatar name={b.seller} size={22} />
              <span style={{ color: T.sub }}>{b.seller}{b.sellerPhone ? ` · ${b.sellerPhone}` : ""}</span>
              <span style={{ marginLeft: "auto", fontFamily: T.headFont, fontWeight: 800, fontSize: 16 }}>{fmtMoney(b.price)}</span>
            </div>
            <div style={{ display: "flex", gap: 8, marginTop: 12, alignItems: "center" }}>
              <div style={{ fontSize: 11, color: T.sub }}>{fmtDT(b.ts)} · {branchOf(st, b.branch).short} · โดย {userOf(st, b.by).name.split(" ")[0]}</div>
              {b.status === "รอตรวจสภาพ" && (
                <Btn sm kind="ok" style={{ marginLeft: "auto" }} onClick={(e) => { e.stopPropagation(); setAccept(b); setAcc({ price: Math.round(b.price * 1.25 / 100) * 100, wprice: "", locId: "", cat: b.kind === "Notebook/MacBook" ? "Notebook/MacBook" : "เครื่องมือสอง" }); }}>✓ ตรวจผ่าน รับเข้าสต็อก</Btn>
              )}
              {sold && <span style={{ marginLeft: "auto" }}><Badge sm tone="danger">● ขายแล้ว</Badge></span>}
            </div>
          </Card>
        ); })}
        {list.length === 0 && <Card style={{ gridColumn: "1/-1" }}><EmptyState text="ยังไม่มีรายการรับซื้อ" /></Card>}
      </div>

      {/* ── ฟอร์มรับซื้อ ── */}
      <Modal open={showForm} onClose={() => setShowForm(false)} title="รับซื้อ / รับเทิร์นเครื่อง / Notebook" width={620}
        footer={<React.Fragment>
          <Btn kind="ghost" onClick={() => setShowForm(false)}>ยกเลิก</Btn>
          <Btn onClick={submit}>บันทึก</Btn>
        </React.Fragment>}>
        <div style={{ display: "flex", flexDirection: "column", gap: 13 }}>
          <div style={{ display: "flex", gap: 8 }}>
            {["รับซื้อ", "รับเทิร์น", "Notebook/MacBook"].map((k) => (
              <Btn key={k} sm kind={f.kind === k ? "primary" : "ghost"} onClick={() => set("kind")(k)}>{k}</Btn>
            ))}
            <div style={{ marginLeft: "auto", fontSize: 12, color: T.sub, alignSelf: "center" }}>สาขา: {branchOf(st, branch).name}</div>
          </div>
          {f.kind === "Notebook/MacBook" ? (
            <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 12 }}>
              <Field label="ยี่ห้อ" req><Select value={f.nbBrand} onChange={(v) => set("nbBrand")(v)} options={["Apple (MacBook)", "ASUS", "Acer", "Lenovo", "HP", "Dell", "MSI", "Razer", "อื่นๆ"]} /></Field>
              <Field label="รุ่น (เช่น MacBook Air M2 13)" req><TextInput value={f.nbModel} onChange={setE("nbModel")} /></Field>
              <Field label="CPU"><TextInput value={f.nbCPU} onChange={setE("nbCPU")} placeholder="เช่น M2, i7 Gen 12" /></Field>
              <Field label="RAM (GB)"><TextInput value={f.nbRAM} onChange={setE("nbRAM")} placeholder="เช่น 8GB, 16GB" /></Field>
              <Field label="Storage"><TextInput value={f.nbStorage} onChange={setE("nbStorage")} placeholder="เช่น 256GB SSD, 512GB" /></Field>
              <Field label="สภาพ"><Select value={f.nbCond} onChange={(v) => set("nbCond")(v)} options={["ปกติ", "มีรอย", "งอบาง", "เปิดไม่ติด"]} /></Field>
              <Field label="Serial Number"><TextInput value={f.nbSerial} onChange={setE("nbSerial")} placeholder="เช่น SGY123ABC456" /></Field>
              <Field label="ราคารับซื้อ (บาท)" req><NumInput value={f.nbPrice} onChange={setE("nbPrice")} /></Field>
              <Field label="ชื่อผู้ขาย" req><TextInput value={f.nbSeller} onChange={setE("nbSeller")} placeholder="เช่น คุณสมชาย" /></Field>
              <Field label="เบอร์โทรผู้ขาย"><TextInput value={f.nbSellerPhone} onChange={setE("nbSellerPhone")} placeholder="08x-xxx-xxxx" /></Field>
              <Field label="เลขบัตรประชาชนผู้ขาย"><TextInput value={f.nbSellerCard} onChange={setE("nbSellerCard")} placeholder="บันทึกเพื่อเป็นหลักฐาน" /></Field>
              <Field label="สภาพเครื่อง / ตำหนิ / หมายเหตุ" style={{ gridColumn: "1/-1" }}><TextArea value={f.nbNote} onChange={setE("nbNote")} placeholder="เช่น มีรอยที่ฝาเล็กน้อย · ครบกล่อง อุปกรณ์ครบ" /></Field>
              <Field label="รูปถ่ายเครื่อง (หลายรูป)" style={{ gridColumn: "1/-1" }}><MultiImgUpload value={f.imgs} onChange={set("imgs")} size={56} hint="ถ่ายเครื่องไว้เป็นหลักฐาน เพิ่มได้หลายรูป" /></Field>
              <Field label="รูปถ่ายบัตรประชาชน" style={{ gridColumn: "1/-1" }}><ImgUpload value={f.imgCard} onChange={set("imgCard")} size={56} hint="ถ่ายบัตรประชาชนผู้ขายคู่กับสัญญาซื้อขาย" /></Field>
            </div>
          ) : (
            <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 12 }}>
              <Field label="ยี่ห้อ" req><Select value={f.brand} onChange={(v) => set("brand")(v)} options={BRANDS.filter((b) => b !== "OEM")} /></Field>
              {f.brand === "อื่นๆ" && <Field label="ระบุยี่ห้อ"><TextInput value={f.brandOther} onChange={setE("brandOther")} /></Field>}
              <Field label="รุ่นเครื่อง" req><TextInput value={f.device} onChange={setE("device")} placeholder="เช่น iPhone 11" /></Field>
              <Field label="สี"><TextInput value={f.color} onChange={setE("color")} placeholder="เช่น ดำ, ขาว, ฟ้า" /></Field>
              <Field label="ความจุ (Storage)"><Select value={f.storage} onChange={(v) => set("storage")(v)} options={["", "64GB", "128GB", "256GB", "512GB", "1TB", "2TB", "อื่นๆ"]} /></Field>
              {f.storage === "อื่นๆ" && <Field label="ระบุความจุ"><TextInput value={f.storageOther} onChange={setE("storageOther")} placeholder="เช่น 32GB" /></Field>}
              <Field label="IMEI / Serial"><TextInput value={f.imei} onChange={setE("imei")} placeholder="35XXXXXXXXXXXXX" /></Field>
              <Field label="เปอร์เซ็นต์แบตเตอรี่ (%)"><NumInput value={f.battery} onChange={setE("battery")} min="0" max="100" placeholder="เช่น 86" /></Field>
              <Field label="ราคารับซื้อ (บาท)" req><NumInput value={f.price} onChange={setE("price")} min="0" /></Field>
              <Field label="ชื่อผู้ขาย" req><TextInput value={f.seller} onChange={setE("seller")} placeholder="เช่น คุณสมชาย" /></Field>
              <Field label="เบอร์โทรผู้ขาย"><TextInput value={f.sellerPhone} onChange={setE("sellerPhone")} placeholder="08x-xxx-xxxx" /></Field>
              <Field label="เลขบัตรประชาชนผู้ขาย" style={{ gridColumn: "1/-1" }}><TextInput value={f.sellerCard} onChange={setE("sellerCard")} placeholder="บันทึกเพื่อเป็นหลักฐาน" /></Field>
              <Field label="รูปถ่ายเครื่อง (เพิ่มได้หลายรูป)" style={{ gridColumn: "1/-1" }}><MultiImgUpload value={f.imgs} onChange={set("imgs")} size={56} hint="ถ่ายสภาพเครื่องรอบด้านไว้เป็นหลักฐาน" /></Field>
              <Field label="รูปถ่ายบัตรประชาชน" style={{ gridColumn: "1/-1" }}><ImgUpload value={f.imgCard} onChange={set("imgCard")} size={56} hint="ถ่ายบัตรประชาชนผู้ขายคู่กับสัญญาซื้อขาย" /></Field>
            </div>
          )}
          {f.kind !== "Notebook/MacBook" && <Field label="สภาพเครื่อง / ตำหนิ / สุขภาพแบต"><TextArea value={f.cond} onChange={setE("cond")} placeholder="เช่น เกรด B · รอยขอบเล็กน้อย แบต 86% ครบกล่อง" /></Field>}
        </div>
      </Modal>

      {/* ── รับเข้าสต็อก ── */}
      <Modal open={!!accept} onClose={() => setAccept(null)} title={`รับเข้าสต็อก · ${accept ? accept.device : ""}`} width={460}
        footer={<React.Fragment>
          <Btn kind="ghost" onClick={() => setAccept(null)}>ยกเลิก</Btn>
          <Btn kind="ok" onClick={doAccept}>✓ ยืนยันรับเข้าสต็อก</Btn>
        </React.Fragment>}>
        <div style={{ display: "flex", flexDirection: "column", gap: 13 }}>
          <div style={{ fontSize: 12.5, color: T.sub, background: T.chipBg, borderRadius: 10, padding: "9px 13px" }}>
            ระบบจะสร้างสินค้าใหม่ในสต็อก พร้อมบันทึกความเคลื่อนไหว "รับเข้า" ที่ Location ที่เลือกโดยอัตโนมัติ
          </div>
          <Field label="หมวดสินค้าในสต็อก" req>
            <Select value={acc.cat} onChange={(v) => setAcc((x) => ({ ...x, cat: v }))}
              options={[{ value: "เครื่องมือสอง", label: "เครื่องมือสอง (มือถือ)" }, { value: "Notebook/MacBook", label: "Notebook / MacBook" }]} />
          </Field>
          <Field label="ราคาส่ง (บาท)"><NumInput value={acc.wprice} onChange={(e) => setAcc((x) => ({ ...x, wprice: e.target.value }))} placeholder="เว้นว่างได้ ถ้าไม่มีราคาส่ง" /></Field>
          <Field label="ตั้งราคาขาย (บาท)" req><NumInput value={acc.price} onChange={(e) => setAcc((x) => ({ ...x, price: e.target.value }))} /></Field>
          <Field label="เก็บที่ Location" req>
            <Select value={acc.locId} onChange={(v) => setAcc((x) => ({ ...x, locId: v }))} placeholder="— เลือก Location —"
              options={showLocs.map((l) => ({ value: l.id, label: `${l.code} · ${l.name} (${branchOf(st, l.branch).short})` }))} />
          </Field>
          {accept && <div style={{ fontSize: 12, color: T.sub }}>ต้นทุน (ราคารับซื้อ): <b>{fmtMoney(accept.price)}</b> → กำไรขั้นต้นโดยประมาณ <b style={{ color: "#0E7A4D" }}>{fmtMoney(Math.max(0, (Number(acc.price) || 0) - accept.price))}</b></div>}
        </div>
      </Modal>

      {/* ── รายละเอียด / แก้ไขรายการรับซื้อ ── */}
      <Modal open={!!detail} onClose={() => { setDetail(null); setEditing(false); }} width={560}
        title={detail ? `${editing ? "แก้ไขรายการ" : "รายละเอียด"} · ${detail.id}` : ""}
        footer={detail && <React.Fragment>
          {canManage && !editing && <Btn kind="dangerSoft" sm onClick={delBuyin}>ลบรายการ</Btn>}
          <Btn kind="ghost" onClick={() => editing ? (setEditing(false), setEd(splitEd(detail))) : setDetail(null)}>{editing ? "ยกเลิก" : "ปิด"}</Btn>
          {!editing && <Btn kind="soft" style={{ marginLeft: "auto" }} onClick={printBarcode}>🏷 พิมพ์บาร์โค้ด</Btn>}
          {canManage && (editing
            ? <Btn style={{ marginLeft: "auto" }} onClick={saveEdit}>บันทึกการแก้ไข</Btn>
            : <Btn onClick={() => setEditing(true)}>✎ แก้ไขข้อมูล</Btn>)}
        </React.Fragment>}>
        {detail && !editing && (
          <div style={{ display: "flex", flexDirection: "column", gap: 4 }}>
            <div style={{ display: "flex", gap: 14, alignItems: "center", marginBottom: 10 }}>
              <ProductImg p={{ img: detail.img, cat: "เครื่อง" }} size={72} radius={14} />
              <div style={{ minWidth: 0 }}>
                <div style={{ display: "flex", gap: 8, alignItems: "center", marginBottom: 4 }}>
                  <Badge sm tone={detail.kind === "รับเทิร์น" ? "info" : "muted"}>{detail.kind}</Badge>
                  <Badge sm tone={detail.status === "รอตรวจสภาพ" ? "warn" : "ok"}>{detail.status}</Badge>
                </div>
                <div style={{ fontFamily: T.headFont, fontWeight: 800, fontSize: 19 }}>{detail.brand ? detail.brand + " · " : ""}{detail.device}</div>
              </div>
              <div style={{ marginLeft: "auto", textAlign: "right" }}>
                <div style={{ fontSize: 11.5, color: T.sub }}>ราคารับซื้อ</div>
                <div style={{ fontFamily: T.headFont, fontWeight: 800, fontSize: 22 }}>{fmtMoney(detail.price)}</div>
              </div>
            </div>
            <Row label="IMEI / Serial">{detail.imei}</Row>
            <Row label="สี">{detail.color || "—"}</Row>
            <Row label="ความจุ (Storage)">{detail.storage || "—"}</Row>
            <Row label="เปอร์เซ็นต์แบต">{detail.battery ? `${detail.battery}%` : ""}</Row>
            <Row label="สภาพ / ตำหนิ">{detail.cond}</Row>
            <Row label="ชื่อผู้ขาย">{splitSeller(detail.seller, detail.sellerPhone).name}</Row>
            <Row label="เบอร์โทร">{splitSeller(detail.seller, detail.sellerPhone).phone}</Row>
            <Row label="เลขบัตรประชาชน">{detail.sellerCard}</Row>
            <Row label="สาขา">{branchOf(st, detail.branch).name}</Row>
            <Row label="ผู้รับซื้อ">{userOf(st, detail.by).name}</Row>
            <Row label="วันที่บันทึก">{fmtDT(detail.ts)}</Row>
            {((detail.imgs && detail.imgs.length) || detail.img) && (
              <div style={{ marginTop: 10 }}>
                <div style={{ fontSize: 12, color: T.sub, fontWeight: 600, marginBottom: 6 }}>รูปถ่ายเครื่อง ({(detail.imgs && detail.imgs.length) || 1} รูป)</div>
                <div style={{ display: "flex", flexWrap: "wrap", gap: 8 }}>
                  {(detail.imgs && detail.imgs.length ? detail.imgs : [detail.img]).map((src, i) => {
                    const arr = detail.imgs && detail.imgs.length ? detail.imgs : [detail.img];
                    return (
                      <img key={i} src={src} alt={`รูปเครื่อง ${i + 1}`} onClick={() => setLb({ imgs: arr, i })} style={{ width: 96, height: 96, objectFit: "cover", borderRadius: 10, border: `1px solid ${T.border}`, cursor: "zoom-in" }} />
                    );
                  })}
                </div>
              </div>
            )}
            {detail.imgCard && (
              <div style={{ marginTop: 10 }}>
                <div style={{ fontSize: 12, color: T.sub, fontWeight: 600, marginBottom: 6 }}>รูปบัตรประชาชนผู้ขาย</div>
                <img src={detail.imgCard} alt="บัตรประชาชน" onClick={() => setLb({ imgs: [detail.imgCard], i: 0 })} style={{ maxWidth: 220, borderRadius: 10, border: `1px solid ${T.border}`, cursor: "zoom-in" }} />
              </div>
            )}
          </div>
        )}
        {detail && editing && (
          <div style={{ display: "flex", flexDirection: "column", gap: 13 }}>
            {detail.status !== "รอตรวจสภาพ" && (
              <div style={{ fontSize: 12, color: T.warnFg, background: T.warnBg, borderRadius: 10, padding: "9px 13px" }}>
                ⚠ รายการนี้รับเข้าสต็อกแล้ว — การแก้ไขจะปรับเฉพาะข้อมูลบันทึกการรับซื้อ ไม่กระทบสินค้าในสต็อก
              </div>
            )}
            <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 12 }}>
              <Field label="ประเภท"><Select value={ed.kind} onChange={edV("kind")} options={["รับซื้อ", "รับเทิร์น", "Notebook/MacBook"]} /></Field>
              <Field label="ยี่ห้อ"><TextInput value={ed.brand || ""} onChange={edE("brand")} /></Field>
              <Field label="รุ่นเครื่อง" req style={{ gridColumn: "1/-1" }}><TextInput value={ed.device || ""} onChange={edE("device")} /></Field>
              <Field label="สี"><TextInput value={ed.color || ""} onChange={edE("color")} placeholder="เช่น ดำ, ขาว" /></Field>
              <Field label="ความจุ (Storage)"><Select value={ed.storage || ""} onChange={edV("storage")} options={["", "64GB", "128GB", "256GB", "512GB", "1TB", "2TB", "อื่นๆ"]} /></Field>
              <Field label="IMEI / Serial"><TextInput value={ed.imei || ""} onChange={edE("imei")} /></Field>
              <Field label="เปอร์เซ็นต์แบต (%)"><NumInput value={ed.battery || ""} onChange={edE("battery")} min="0" max="100" /></Field>
              <Field label="ราคารับซื้อ (บาท)" req><NumInput value={ed.price} onChange={edE("price")} min="0" /></Field>
              <Field label="ชื่อผู้ขาย" req><TextInput value={ed.seller || ""} onChange={edE("seller")} placeholder="เช่น คุณสมชาย" /></Field>
              <Field label="เบอร์โทรผู้ขาย"><TextInput value={ed.sellerPhone || ""} onChange={edE("sellerPhone")} placeholder="08x-xxx-xxxx" /></Field>
              <Field label="เลขบัตรประชาชนผู้ขาย"><TextInput value={ed.sellerCard || ""} onChange={edE("sellerCard")} placeholder="บันทึกเพื่อเป็นหลักฐาน" /></Field>
            </div>
            <Field label="สภาพเครื่อง / ตำหนิ / สุขภาพแบต"><TextArea value={ed.cond || ""} onChange={edE("cond")} /></Field>
            <div style={{ display: "flex", gap: 18, flexWrap: "wrap" }}>
              <Field label="รูปถ่ายเครื่อง (หลายรูป)" style={{ flex: "1 1 100%" }}><MultiImgUpload value={ed.imgs} onChange={edV("imgs")} size={56} hint="เพิ่มได้หลายรูป" /></Field>
              <Field label="รูปถ่ายบัตรประชาชน"><ImgUpload value={ed.imgCard} onChange={edV("imgCard")} size={56} /></Field>
            </div>
          </div>
        )}
      </Modal>

      <BarcodePrintModal open={!!bcTarget} product={bcTarget} onClose={() => setBcTarget(null)} />
      <Lightbox images={lb.imgs} index={lb.i} onClose={() => setLb({ imgs: [], i: null })} onIndex={(i) => setLb((x) => ({ ...x, i }))} />
    </div>
  );
}
window.BuyinPage = BuyinPage;
