const{PageHeader,Card,Select,TextField,SearchField,QuantityStepper,Button,DataTable,StatusBadge,IconButton,Dialog}=window.RemedeStockDesignSystem_3e957a,RIcon=window.REMEDE.Icon,todayStr=()=>window.REMEDE.todayDMY();function StockReceiving(){const{data:L,loading:I,error:g,reload:p}=window.REMEDE.useAsyncData(async()=>{const[e,t]=await Promise.all([window.REMEDE.getMedicines(),window.REMEDE.getReceivings()]);return{medicines:e,rows:t}},{initial:{medicines:[],rows:[]},errorMessage:"โหลดข้อมูลไม่สำเร็จ"}),y=L.medicines,z=L.rows,[s,f]=React.useState(""),[m,d]=React.useState(""),[h,W]=React.useState(10),[E,B]=React.useState(""),[F,T]=React.useState(""),[U,N]=React.useState(""),[j,O]=React.useState(""),[Q,Y]=React.useState(todayStr()),[A,G]=window.REMEDE.useFlash(!1),[x,q]=React.useState(""),V=window.REMEDE.useSaveGuard(),[i,R]=React.useState([]),[b,w]=React.useState(!1),S=React.useRef(null),k=React.useRef(null),P=React.useRef([]);React.useEffect(()=>{P.current=i},[i]),React.useEffect(()=>()=>{P.current.forEach(e=>URL.revokeObjectURL(e.url))},[]);const H=e=>{const t=Array.from(e||[]).filter(a=>a.type&&a.type.indexOf("image/")===0);t.length&&R(a=>[...a,...t.map(C=>({file:C,url:URL.createObjectURL(C)}))].slice(0,8))},J=e=>R(t=>{const a=t[e];return a&&URL.revokeObjectURL(a.url),t.filter((C,ae)=>ae!==e)}),[n,r]=React.useState(null),K=async e=>{r({name:e.name,urls:[],loading:!0});try{const t=await window.REMEDE.getEvidenceUrls(e.evidence);r({name:e.name,urls:t,loading:!1})}catch(t){r({name:e.name,urls:[],loading:!1,err:t.message||"เปิดรูปไม่สำเร็จ"})}},[o,c]=React.useState(null),[D,_]=React.useState(""),[$,u]=React.useState(""),X=window.REMEDE.useSaveGuard(),Z=e=>{c(e),_(String(e.qty)),u("")},ee=()=>X(async()=>{if(!o)return;const e=Number(D),t=window.REMEDE.validateReceivedQty(D);if(t){u(t);return}u("");try{await window.REMEDE.editReceiving(o.id,e),c(null),await p()}catch(a){u(a.message||"แก้ไขไม่สำเร็จ")}});window.REMEDE.useLucide([z,A,I,g,x,y,s,m,i,b,n,o]);const l=y.find(e=>e.id===s),v=window.REMEDE.searchRows(y,m,["name","cat"]),te=window.REMEDE.canSaveReceiving({medicineId:s,qty:h,lot:E}),ne=()=>V(async()=>{q("");try{let e=[];i.length&&(w(!0),e=await Promise.all(i.map(t=>window.REMEDE.uploadReceivingEvidence(t.file))),w(!1)),await window.REMEDE.receiveStock({medicineId:s,qty:h,lot:E.trim(),exp:F.trim(),supplier:U.trim(),unitCost:j,receivedAt:Q.trim(),evidence:e}),i.forEach(t=>URL.revokeObjectURL(t.url)),R([]),f(""),W(10),B(""),T(""),N(""),O(""),Y(todayStr()),G(!0),await p()}catch(e){w(!1),q(e.message||"บันทึกรับเข้าไม่สำเร็จ กรุณาลองใหม่")}}),M=React.createElement(PageHeader,{eyebrow:"รับเข้าสต๊อก",title:"บันทึกของเข้าใหม่",description:"ลงรับยาและเวชภัณฑ์ที่รับเข้าคลัง พร้อมเลขที่ล็อตและวันหมดอายุ"});return I?React.createElement("div",{style:{maxWidth:"var(--content-max)"}},M,React.createElement(Card,{padding:"md",style:{marginTop:"var(--space-7)"}},React.createElement(window.REMEDE.LoadingState,null))):g?React.createElement("div",{style:{maxWidth:"var(--content-max)"}},M,React.createElement(Card,{padding:"md",style:{marginTop:"var(--space-7)"}},React.createElement(window.REMEDE.ErrorState,{message:g,onRetry:p}))):React.createElement("div",{style:{maxWidth:"var(--content-max)"}},M,React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1.4fr",gap:"var(--space-6)",marginTop:"var(--space-7)",alignItems:"start"}},React.createElement(Card,{padding:"md"},React.createElement("h3",{style:{fontSize:"var(--text-lg)",fontWeight:600,marginBottom:16}},"รายละเอียดการรับเข้า"),React.createElement("div",{style:{display:"flex",flexDirection:"column",gap:16}},React.createElement("div",{style:{display:"flex",flexDirection:"column",gap:6}},React.createElement("label",{style:{fontSize:"var(--text-sm)",fontWeight:500,color:"var(--text-body)"}},"รายการยา / เวชภัณฑ์ ",React.createElement("span",{style:{color:"var(--danger-500)"}},"*")),l?React.createElement("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 12px",background:"var(--navy-50)",border:"1px solid var(--navy-100)",borderRadius:"var(--radius-md)"}},React.createElement("div",{style:{flex:1,minWidth:0}},React.createElement("div",{style:{fontWeight:600,color:"var(--text-strong)"}},l.name),React.createElement("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-muted)"}},l.cat," · คงเหลือ ",l.stock," ",l.unit)),React.createElement(Button,{variant:"ghost",size:"sm",onClick:()=>{f(""),d("")},iconLeft:React.createElement(RIcon,{n:"repeat",s:15})},"เปลี่ยน")):React.createElement(React.Fragment,null,React.createElement(SearchField,{value:m,onChange:e=>d(e.target.value),onClear:()=>d(""),placeholder:"ค้นหาชื่อของ / หมวด…"}),React.createElement("div",{style:{marginTop:4,display:"flex",flexDirection:"column",gap:4,maxHeight:240,overflowY:"auto",border:"1px solid var(--border-subtle)",borderRadius:"var(--radius-md)",padding:v.length?6:0}},v.slice(0,60).map(e=>React.createElement("button",{key:e.id,type:"button",onClick:()=>{f(e.id),d("")},style:{display:"flex",alignItems:"center",gap:10,padding:"9px 10px",border:"none",background:"transparent",borderRadius:"var(--radius-sm)",cursor:"pointer",textAlign:"left",fontFamily:"var(--font-ui)"},onMouseEnter:t=>t.currentTarget.style.background="var(--neutral-100)",onMouseLeave:t=>t.currentTarget.style.background="transparent"},React.createElement("div",{style:{flex:1,minWidth:0}},React.createElement("div",{style:{fontWeight:500,color:"var(--text-strong)",fontSize:"var(--text-sm)"}},e.name),React.createElement("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-subtle)"}},e.cat," · คงเหลือ ",e.stock," ",e.unit)),React.createElement(RIcon,{n:"plus",s:15}))),v.length===0?React.createElement("div",{style:{padding:16,textAlign:"center",color:"var(--text-subtle)",fontSize:"var(--text-sm)"}},"ไม่พบรายการ"):null,v.length>60?React.createElement("div",{style:{padding:"6px 10px",textAlign:"center",color:"var(--text-subtle)",fontSize:"var(--text-xs)"}},"แสดง 60 รายการแรก — พิมพ์ค้นหาเพิ่มเพื่อลดผลลัพธ์"):null))),React.createElement("div",{style:{display:"flex",flexDirection:"column",gap:6}},React.createElement("label",{style:{fontSize:"var(--text-sm)",fontWeight:500,color:"var(--text-body)"}},"จำนวนที่รับเข้า ",React.createElement("span",{style:{color:"var(--danger-500)"}},"*")),React.createElement(QuantityStepper,{value:h,onChange:W,min:1,max:999,unit:"หน่วย",size:"lg"})),React.createElement(TextField,{label:"วันที่รับเข้า",value:Q,onChange:e=>Y(e.target.value),placeholder:"DD/MM/YYYY",iconLeft:React.createElement(RIcon,{n:"calendar-check",s:16}),hint:"ค่าเริ่มต้นเป็นวันนี้ — แก้เป็นวันย้อนหลังได้ (คีย์ย้อนหลัง)"}),React.createElement(TextField,{label:"เลขที่ล็อต (Lot no.)",required:!0,value:E,onChange:e=>B(e.target.value),placeholder:"LOT-0000-A",iconLeft:React.createElement(RIcon,{n:"hash",s:16})}),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12}},React.createElement(TextField,{label:"ราคาต้นทุน / หน่วย",value:j,onChange:e=>O(e.target.value.replace(/[^0-9.]/g,"")),placeholder:"0.00",iconLeft:React.createElement(RIcon,{n:"banknote",s:16}),hint:"ต้นทุนของล็อตนี้ (อัปเดตต้นทุนเฉลี่ยให้อัตโนมัติ)"}),React.createElement(TextField,{label:"วันหมดอายุ",value:F,onChange:e=>T(e.target.value),placeholder:"MM/YY",iconLeft:React.createElement(RIcon,{n:"calendar",s:16})})),React.createElement(TextField,{label:"ผู้จำหน่าย",value:U,onChange:e=>N(e.target.value),placeholder:"ชื่อ Supplier"}),React.createElement("div",{style:{display:"flex",flexDirection:"column",gap:8}},React.createElement("label",{style:{fontSize:"var(--text-sm)",fontWeight:500,color:"var(--text-body)"}},"รูปหลักฐานการรับของ ",React.createElement("span",{style:{color:"var(--text-subtle)",fontWeight:400}},"(ถ่ายจำนวนของจริง / หน้าบิล)")),React.createElement("div",{style:{display:"flex",gap:8,flexWrap:"wrap"}},i.map((e,t)=>React.createElement("div",{key:t,style:{position:"relative",width:74,height:74,borderRadius:"var(--radius-md)",overflow:"hidden",border:"1px solid var(--border-subtle)"}},React.createElement("img",{src:e.url,alt:"",style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}}),React.createElement("button",{type:"button",onClick:()=>J(t),"aria-label":"ลบรูป",style:{position:"absolute",top:3,right:3,width:20,height:20,borderRadius:"50%",border:"none",background:"rgba(34,32,28,.72)",color:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",padding:0}},React.createElement(RIcon,{n:"x",s:12})))),i.length<8?React.createElement(React.Fragment,null,React.createElement("button",{type:"button",onClick:()=>S.current&&S.current.click(),style:{width:74,height:74,borderRadius:"var(--radius-md)",border:"1px dashed var(--border-default)",background:"var(--neutral-50)",color:"var(--text-muted)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:3,cursor:"pointer",fontFamily:"var(--font-ui)",fontSize:"var(--text-2xs)"}},React.createElement(RIcon,{n:"camera",s:18}),"ถ่ายรูป"),React.createElement("button",{type:"button",onClick:()=>k.current&&k.current.click(),style:{width:74,height:74,borderRadius:"var(--radius-md)",border:"1px dashed var(--border-default)",background:"var(--neutral-50)",color:"var(--text-muted)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:3,cursor:"pointer",fontFamily:"var(--font-ui)",fontSize:"var(--text-2xs)"}},React.createElement(RIcon,{n:"image-plus",s:18}),"เลือกรูป")):null),React.createElement("input",{ref:S,type:"file",accept:"image/*",capture:"environment",style:{display:"none"},onChange:e=>{H(e.target.files),e.target.value=""}}),React.createElement("input",{ref:k,type:"file",accept:"image/*",multiple:!0,style:{display:"none"},onChange:e=>{H(e.target.files),e.target.value=""}}),React.createElement("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-subtle)"}},"แนบได้สูงสุด 8 รูป (ไม่บังคับ) — เป็นหลักฐานว่าของมาส่งและนับตามจำนวนจริง")),React.createElement(Button,{block:!0,size:"lg",disabled:!te||b,onClick:ne,iconLeft:React.createElement(RIcon,{n:"package-plus",s:16})},b?"กำลังอัปโหลดรูป…":"บันทึกรับเข้า"),x?React.createElement(window.REMEDE.InlineNote,{tone:"danger"},x):null,A?React.createElement(window.REMEDE.InlineNote,null,"บันทึกรับเข้าเรียบร้อยแล้ว"):null)),React.createElement("div",null,React.createElement("h3",{style:{fontSize:"var(--text-lg)",fontWeight:600,marginBottom:14}},"ประวัติการรับเข้าล่าสุด"),React.createElement(DataTable,{columns:[{key:"date",header:"วันที่"},{key:"name",header:"รายการ"},{key:"qty",header:"จำนวน",align:"right",mono:!0,render:e=>`+${e.qty}`},{key:"cost",header:"ต้นทุน/หน่วย",align:"right",mono:!0},{key:"lot",header:"ล็อต",mono:!0},{key:"exp",header:"หมดอายุ",mono:!0},{key:"supplier",header:"ผู้จำหน่าย"},{key:"evidence",header:"หลักฐาน",render:e=>e.evidence&&e.evidence.length?React.createElement(Button,{variant:"ghost",size:"sm",onClick:()=>K(e),iconLeft:React.createElement(RIcon,{n:"image",s:14})},e.evidence.length," รูป"):React.createElement("span",{style:{color:"var(--text-subtle)"}},"—")},{key:"act",header:"",align:"right",render:e=>React.createElement(IconButton,{label:"แก้ไขจำนวน",size:"sm",onClick:()=>Z(e)},React.createElement(RIcon,{n:"pencil",s:15}))}],rows:z,empty:"ยังไม่มีประวัติการรับเข้า"}))),React.createElement(Dialog,{open:!!o,onClose:()=>c(null),tone:"warning",title:"แก้ไขจำนวนรับเข้า",description:o?`${o.name} · รับเข้าเมื่อ ${o.date}`:"",footer:React.createElement(React.Fragment,null,React.createElement(Button,{variant:"ghost",onClick:()=>c(null)},"ยกเลิก"),React.createElement(Button,{variant:"secondary",onClick:ee,iconLeft:React.createElement(RIcon,{n:"check",s:16})},"บันทึกการแก้ไข"))},React.createElement("div",{style:{display:"flex",flexDirection:"column",gap:12}},React.createElement(TextField,{label:"จำนวนรับเข้าที่ถูกต้อง",required:!0,value:D,onChange:e=>_(e.target.value.replace(/[^0-9]/g,"")),placeholder:"0",iconLeft:React.createElement(RIcon,{n:"package",s:16})}),$?React.createElement(window.REMEDE.InlineNote,{tone:"danger"},$):null,React.createElement("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-subtle)"}},"ระบบจะปรับยอดคงเหลือตามส่วนต่างให้อัตโนมัติ และบันทึกประวัติการแก้ไขไว้"))),React.createElement(Dialog,{open:!!n,onClose:()=>r(null),title:"รูปหลักฐานการรับของ",description:n?n.name:"",footer:React.createElement(Button,{variant:"ghost",onClick:()=>r(null)},"ปิด")},n&&n.loading?React.createElement(window.REMEDE.LoadingState,{label:"กำลังเปิดรูป…"}):n&&n.err?React.createElement(window.REMEDE.InlineNote,{tone:"danger"},n.err):n?React.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:10}},n.urls.map((e,t)=>React.createElement("a",{key:t,href:e,target:"_blank",rel:"noopener noreferrer",title:"เปิดรูปเต็ม"},React.createElement("img",{src:e,alt:"",style:{maxWidth:220,maxHeight:220,borderRadius:"var(--radius-md)",border:"1px solid var(--border-subtle)",display:"block"}}))),n.urls.length===0?React.createElement("div",{style:{color:"var(--text-subtle)",fontSize:"var(--text-sm)"}},"ไม่พบรูป"):null):null))}window.StockReceiving=StockReceiving;
