1import{u as me,j as ge,r as c,l as h,B as pe,q as be,c as l,b as e,i as $,a as ve,h as xe,p as S,m as s,t as n,f as g,z as M,F as w,x as C,v as f,e as k,w as ye,C as fe,D as K,E as ke,G as _e,_ as he,o as i}from"#entry";import{i as we,C as G,A as O,M as W,a as X,g as J,b as Q,u as Ce,c as Ee}from"./DRq45blS.js";import{n as Y}from"./q3U5rlDj.js";import{u as Ae,d as Re}from"./nDhKAmaK.js";import{u as Pe}from"./B-jTRGN7.js";import"./BsqTxom4.js";import"./CaVVEZRR.js";const Se={class:"mb-8"},Me={class:"mt-1 text-sm text-slate-600"},Oe={class:"mb-6 border-b border-slate-200/90"},Ne={class:"flex gap-6"},Ve={key:0,class:"space-y-6"},je={class:"bg-white rounded-lg border border-slate-200/80 p-6"},Ie={class:"grid grid-cols-1 md:grid-cols-3 gap-4"},Le=["value"],qe={class:"grid grid-cols-1 md:grid-cols-3 gap-6"},Ue={class:"bg-white rounded-lg border border-slate-200/80 p-6"},Te={class:"text-3xl font-bold text-gray-900 mt-1"},$e={class:"bg-white rounded-lg border border-slate-200/80 p-6"},Ge={class:"text-3xl font-bold text-gray-900 mt-1"},Fe={class:"bg-white rounded-lg border border-slate-200/80 p-6"},Be={class:"text-3xl font-bold text-gray-900 mt-1"},De={class:"bg-white rounded-lg border border-slate-200/80 p-6"},ze={key:0,class:"flex justify-center py-16"},He={key:1,class:"text-center py-16 text-gray-500"},Ke={key:2,class:"overflow-x-auto"},We={class:"w-full text-sm"},Xe={class:"py-3 px-3"},Je={class:"flex items-center gap-3 min-w-0"},Qe=["src","alt"],Ye={key:1,class:"w-10 h-10 rounded bg-slate-100 shrink-0"},Ze={class:"min-w-0"},et={class:"font-medium text-gray-900 truncate"},tt={key:0,class:"text-xs text-gray-500"},ot={class:"py-3 px-3 text-gray-700"},at={class:"py-3 px-3 text-gray-700"},st={class:"py-3 px-3 font-medium text-gray-900"},rt={class:"py-3 px-3"},lt={class:"py-3 px-3 max-w-[180px]"},it=["href"],nt={key:1,class:"text-gray-400"},dt={class:"py-3 px-3 text-right whitespace-nowrap"},ut=["onClick"],ct=["disabled","onClick"],mt={key:0,class:"mt-4 flex items-center justify-between text-sm text-gray-600"},gt={class:"flex gap-2"},pt=["disabled"],bt=["disabled"],vt={key:1,class:"bg-white rounded-lg border border-slate-200/80 p-6"},xt={class:"flex flex-wrap items-center justify-between gap-3 mb-6"},yt={class:"text-xl font-semibold text-gray-900"},ft={class:"grid grid-cols-1 md:grid-cols-2 gap-6"},kt=["value"],_t={key:0,class:"mt-1 text-xs text-gray-500"},ht={class:"block text-sm font-medium text-gray-700 mb-2"},wt=["required"],Ct=["value"],Et={class:"md:col-span-2"},At={class:"md:col-span-2"},Rt={class:"block text-sm font-medium text-gray-700 mb-2"},Pt=["disabled"],St={key:0,class:"mt-2 text-sm text-red-600"},Mt={key:1,class:"mt-4 grid grid-cols-2 sm:grid-cols-4 gap-3"},Ot=["src"],Nt=["onClick"],Vt={class:"flex flex-wrap justify-end gap-3"},jt=["disabled"],N=4,F=50,Dt={__name:"productos",setup(It){me({title:"Productos - Panel Admin",meta:[{name:"robots",content:"noindex, nofollow"}]});const{$firestore:B}=ge(),{crearRepuesto:Z,actualizarRepuesto:ee}=Pe(),x=c("ver"),V=c(!1),E=c(!1),j=c([]),p=c({categoria:"",busqueda:""}),b=c(1),v=c(null),A=c(null),m=c(null),I=c(null),L=c(!1),y=c(""),D=()=>({categoria:"",subcategoria:"",marcaRepuesto:"",nombre:"",descripcion:"",precio:"",codigoOEM:"",stock:!0,imagenes:[],slug:""}),a=c(D()),q=h(()=>J(a.value.categoria)),z=h(()=>q.value?.subcategorias||[]),_=h(()=>{let r=[...j.value];if(p.value.categoria&&(r=r.filter(t=>(t.categoria||"")===p.value.categoria)),p.value.busqueda){const t=p.value.busqueda.toLowerCase();r=r.filter(u=>[u.nombre,u.descripcion,u.marcaRepuesto,u.subcategoria,u.codigoOEM].filter(Boolean).some(o=>String(o).toLowerCase().includes(t)))}return r}),te=h(()=>_.value.filter(r=>r.stock).length),R=h(()=>Math.max(1,Math.ceil(_.value.length/F))),oe=h(()=>{const r=(b.value-1)*F;return _.value.slice(r,r+F)});pe(_,()=>{b.value>R.value&&(b.value=1)});const ae=r=>J(r)?.nombre||r||"â",U=r=>Ce(r),se=r=>{a.value.imagenes.splice(r,1)},T=async()=>{if(B){V.value=!0;try{const r=fe(B,"repuestos");let t;try{t=await K(ke(r,_e("createdAt","desc")))}catch{t=await K(r)}const u=[];t.forEach(o=>{const d=o.data();we(d)&&u.push({id:o.id,...d,createdAt:d.createdAt?.toDate?.()||d.createdAt})}),j.value=u}catch(r){console.error("Error cargando productos genéricos:",r)}finally{V.value=!1}}},re=()=>{p.value={categoria:"",busqueda:""},b.value=1},le=()=>{a.value.subcategoria=""},H=()=>{P(),x.value="cargar"},P=()=>{v.value=null,a.value=D(),m.value=null,y.value=""},ie=()=>{P(),x.value="ver"},ne=r=>
1{v.value=r.id,a.value={categoria:r.categoria||"",subcategoria:r.subcategoria||"",marcaRepuesto:r.marcaRepuesto||"",nombre:r.nombre||"",descripcion:r.descripcion||"",precio:String(r.precio??""),codigoOEM:r.codigoOEM||"",stock:!!r.stock,imagenes:Y(r.imagen,r.imagenes),slug:r.slug||""},m.value=null,x.value="cargar"},de=async r=>{y.value="";const t=Array.from(r.target.files||[]);if(I.value&&(I.value.value=""),!t.length)return;if(!a.value.categoria){y.value="Elige la categorÃa antes de subir fotos.";return}const u=N-a.value.imagenes.length;if(u<=0){y.value=`Máximo ${N} fotos.`;return}L.value=!0;try{for(const o of t.slice(0,u)){const d=await Ae(o,{marca:X,modelo:W,anio:O,catalogo:G,categoria:a.value.categoria});a.value.imagenes.push(d)}}catch(o){y.value=o?.data?.message||o?.message||"Error al subir la imagen"}finally{L.value=!1}},ue=async()=>{if(m.value=null,!a.value.categoria||!a.value.nombre||!a.value.descripcion||!a.value.precio){m.value={ok:!1,mensaje:"Completa los campos obligatorios."};return}if(a.value.categoria==="aceite-motor"&&!a.value.subcategoria){m.value={ok:!1,mensaje:"Para aceite de motor elige la viscosidad."};return}const r=Number(String(a.value.precio).replace(/[^\d]/g,""))||0;if(!r){m.value={ok:!1,mensaje:"Ingresa un precio válido."};return}const t=Y(null,a.value.imagenes),u=v.value&&a.value.slug?a.value.slug:Ee(a.value.categoria,a.value.nombre,a.value.marcaRepuesto),o={catalogo:G,marca:X,modelo:W,anio:O,anioDesde:O,anioHasta:O,categoria:a.value.categoria,subcategoria:a.value.subcategoria||null,nombre:a.value.nombre.trim(),descripcion:a.value.descripcion.trim(),precio:r,stock:a.value.stock,cantidad:1,imagen:t[0]||"",imagenes:t,codigoOEM:a.value.codigoOEM?.trim()||"",marcaRepuesto:a.value.marcaRepuesto?.trim()||"",compatibilidad:[],tags:[G,a.value.categoria,a.value.subcategoria,a.value.marcaRepuesto].filter(Boolean),activo:!0,destacado:!1,slug:u,searchTerms:[a.value.nombre,a.value.descripcion,a.value.marcaRepuesto,a.value.categoria,a.value.subcategoria,a.value.codigoOEM].filter(Boolean).map(d=>String(d).toLowerCase()),metaTitle:a.value.marcaRepuesto?`${a.value.nombre} ${a.value.marcaRepuesto} | AutoPiezas360`:`${a.value.nombre} | AutoPiezas360`,metaDescription:a.value.descripcion.trim().slice(0,160)};E.value=!0;try{v.value?(await ee(v.value,o),m.value={ok:!0,mensaje:"Producto actualizado."}):(await Z(o),m.value={ok:!0,mensaje:"Producto guardado."}),await T(),P(),setTimeout(()=>{x.value="ver"},600)}catch(d){console.error(d),m.value={ok:!1,mensaje:d?.message||"Error al guardar."}}finally{E.value=!1}},ce=async r=>{if(confirm(`¿Eliminar «${r.nombre}»? Esta acción no se puede deshacer.`)){A.value=r.id;try{await Re(r.id),await T()}catch(t){alert(t?.message||"No se pudo eliminar")}finally{A.value=null}}};return be(()=>{T()}),(r,t)=>{const u=he;return i(),l("div",null,[e("header",Se,[t[17]||(t[17]=e("p",{class:"text-[11px] font-semibold uppercase tracking-[0.2em] text-slate-500 mb-2"},"Admin · Catálogo",-1)),t[18]||(t[18]=e("h2",{class:"text-2xl font-semibold text-slate-900 tracking-tight"},"Productos",-1)),e("p",Me,[t[15]||(t[15]=$(" Aceites, filtros e insumos generales â sin anclar a marca/modelo/año de auto. Los repuestos por vehÃculo siguen en ",-1)),ve(u,{to:"/admin/inventario",class:"text-blue-700 hover:underline"},{default:xe(()=>[...t[14]||(t[14]=[$("Inventario",-1)])]),_:1}),t[16]||(t[16]=$(". ",-1))])]),e("div",Oe,[e("nav",Ne,[e("button",{type:"button",class:S(["pb-3 text-sm font-medium border-b-2",s(x)==="ver"?"border-slate-900 text-slate-900":"border-transparent text-slate-500"]),onClick:t[0]||(t[0]=o=>x.value="ver")}," Ver productos ",2),e("button",{type:"button",class:S(["pb-3 text-sm font-medium border-b-2",s(x)==="cargar"?"border-slate-900 text-slate-900":"border-transparent text-slate-500"]),onClick:H},n(s(v)?"Editar producto":"Cargar producto"),3)])]),s(x)==="ver"?(i(),l("div",Ve,[e("div",je,[e("div",Ie,[e("div",null,[t[20]||(t[20]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"CategorÃa",-1)),g(e("select",{"onUpdate:modelValue":t[1]||(t[1]=o=>s(p).categoria=o),class:"w-full px-3 py-2 border border-gray-300 rounded-lg"},[t[19]||(t[19]=e("option",{value:""},"Todas",-1)),(i(!0),l(w,null,C(s(Q),o=>(i(),l("option",{key:o.slug,value:o.slug},n(o.nombre),9,Le))),128))],512),[[M,s(p).categoria]])]),e("div",null,[t[21]||(t[21]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Buscar",-1)),g(e("input",{"onUpdate:modelValue":t[2]||(t[2]=o=>s(p).busqueda=o),type:"text",placeholder:"Nombre, marca, descripciónâ¦",class:"w-full px-3 py-2 border border-gray-300 rounded-lg"},null,512),[[f,s(p).busqueda]])]),e("div",{class:"flex items-end"},[e("button",{type:"button",class:"px-4 py-2 text-sm text-gray-600 border border-gray-300 rounded-lg hover:bg-gray-50",onClick:re}," Limpiar ")])])]),e("div",qe,[e("div",Ue,[t[22]||(t[22]=e("p",{class:"text-sm font-medium text-gray-600"},"Total",-1)),e("p",Te,n(s(j).length),1)]),e("div",$e,[t[23]||(t[23]=e("p",{class:"text-sm font-medium text-gray-600"},"Filtrados",-1)),e("p",Ge,n(s(_).length),1)]),e("div",Fe,[t[24]||(t[24]=e("p",{class:"text-sm font-medium text-gray-600"}
1,"En stock",-1)),e("p",Be,n(s(te)),1)])]),e("div",De,[e("div",{class:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-6"},[t[25]||(t[25]=e("h3",{class:"text-lg font-semibold text-gray-900"},"Listado",-1)),e("button",{type:"button",class:"px-4 py-2 text-sm font-medium text-white bg-red-600 rounded-lg hover:bg-red-700",onClick:H}," + Nuevo producto ")]),s(V)?(i(),l("div",ze,[...t[26]||(t[26]=[e("div",{class:"animate-spin rounded-full h-10 w-10 border-b-2 border-red-600"},null,-1)])])):s(_).length?(i(),l("div",Ke,[e("table",We,[t[27]||(t[27]=e("thead",null,[e("tr",{class:"border-b border-gray-200 text-left text-gray-600"},[e("th",{class:"py-3 px-3 font-medium"},"Producto"),e("th",{class:"py-3 px-3 font-medium"},"CategorÃa"),e("th",{class:"py-3 px-3 font-medium"},"Marca"),e("th",{class:"py-3 px-3 font-medium"},"Precio"),e("th",{class:"py-3 px-3 font-medium"},"Stock"),e("th",{class:"py-3 px-3 font-medium"},"URL"),e("th",{class:"py-3 px-3 font-medium text-right"},"Acciones")])],-1)),e("tbody",null,[(i(!0),l(w,null,C(s(oe),o=>(i(),l("tr",{key:o.id,class:"border-b border-gray-100 hover:bg-gray-50"},[e("td",Xe,[e("div",Je,[o.imagen?(i(),l("img",{key:0,src:o.imagen,alt:o.nombre,class:"w-10 h-10 rounded object-cover bg-slate-100 shrink-0"},null,8,Qe)):(i(),l("div",Ye)),e("div",Ze,[e("p",et,n(o.nombre),1),o.subcategoria?(i(),l("p",tt,n(o.subcategoria),1)):k("",!0)])])]),e("td",ot,n(ae(o.categoria)),1),e("td",at,n(o.marcaRepuesto||"â"),1),e("td",st," $"+n(Number(o.precio||0).toLocaleString("es-CL")),1),e("td",rt,[e("span",{class:S(["inline-flex px-2 py-0.5 rounded text-xs font-medium",o.stock?"text-emerald-700 bg-emerald-50":"text-amber-700 bg-amber-50"])},n(o.stock?"En stock":"Sin stock"),3)]),e("td",lt,[U(o)?(i(),l("a",{key:0,href:U(o),target:"_blank",rel:"noopener noreferrer",class:"text-blue-600 hover:underline truncate block text-xs"},n(U(o)),9,it)):(i(),l("span",nt,"â"))]),e("td",dt,[e("button",{type:"button",class:"text-blue-700 hover:underline mr-3",onClick:d=>ne(o)}," Editar ",8,ut),e("button",{type:"button",class:"text-red-600 hover:underline",disabled:s(A)===o.id,onClick:d=>ce(o)},n(s(A)===o.id?"â¦":"Eliminar"),9,ct)])]))),128))])]),s(R)>1?(i(),l("div",mt,[e("span",null,"Página "+n(s(b))+"/"+n(s(R)),1),e("div",gt,[e("button",{type:"button",class:"px-3 py-1 border rounded-lg disabled:opacity-40",disabled:s(b)<=1,onClick:t[3]||(t[3]=o=>b.value--)}," Anterior ",8,pt),e("button",{type:"button",class:"px-3 py-1 border rounded-lg disabled:opacity-40",disabled:s(b)>=s(R),onClick:t[4]||(t[4]=o=>b.value++)}," Siguiente ",8,bt)])])):k("",!0)])):(i(),l("div",He," No hay productos genéricos aún. Carga aceites, filtros u otros insumos. "))])])):(i(),l("div",vt,[e("div",xt,[e("h3",yt,n(s(v)?"Editar producto":"Agregar producto"),1)]),e("form",{class:"space-y-6",onSubmit:ye(ue,["prevent"])},[e("div",ft,[e("div",null,[t[29]||(t[29]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Tipo / categorÃa *",-1)),g(e("select",{"onUpdate:modelValue":t[5]||(t[5]=o=>s(a).categoria=o),required:"",class:"w-full px-3 py-2 border border-gray-300 rounded-lg",onChange:le},[t[28]||(t[28]=e("option",{value:""},"Seleccionar",-1)),(i(!0),l(w,null,C(s(Q),o=>(i(),l("option",{key:o.slug,value:o.slug},n(o.nombre),9,kt))),128))],544),[[M,s(a).categoria]]),s(q)?(i(),l("p",_t,n(s(q).descripcion),1)):k("",!0)]),e("div",null,[e("label",ht,n(s(a).categoria==="aceite-motor"?"Viscosidad *":"SubcategorÃa"),1),s(z).length?g((i(),l("select",{key:0,"onUpdate:modelValue":t[6]||(t[6]=o=>s(a).subcategoria=o),required:s(a).categoria==="aceite-motor",class:"w-full px-3 py-2 border border-gray-300 rounded-lg"},[t[30]||(t[30]=e("option",{value:""},"Seleccionar",-1)),(i(!0),l(w,null,C(s(z),o=>(i(),l("option",{key:o.slug,value:o.slug},n(o.label),9,Ct))),128))],8,wt)),[[M,s(a).subcategoria]]):g((i(),l("input",{key:1,"onUpdate:modelValue":t[7]||(t[7]=o=>s(a).subcategoria=o),type:"text",placeholder:"Opcional",class:"w-full px-3 py-2 border border-gray-300 rounded-lg"},null,512)),[[f,s(a).subcategoria]])]),e("div",null,[t[31]||(t[31]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Marca del producto",-1)),g(e("input",{"onUpdate:modelValue":t[8]||(t[8]=o=>s(a).marcaRepuesto=o),type:"text",placeholder:"Ej: Mobil, Castrol, Mann Filter",class:"w-full px-3 py-2 border border-gray-300 rounded-lg"},null,512),[[f,s(a).marcaRepuesto]])]),e("div",null,[t[32]||(t[32]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Nombre *",-1)),g(e("input",{"onUpdate:modelValue":t[9]||(t[9]=o=>s(a).nombre=o),type:"text",required:"",placeholder:"Ej: Aceite Mobil Super 10W-40 4L",class:"w-full px-3 py-2 border border-gray-300 rounded-lg"},null,512),[[f,s(a).nombre]])]),e("div",Et,[t[33]||(t[33]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Descripción *",-1)),g(e("textarea",{"onUpdate:modelValue":t[10]||(t[10]=o=>s(a).descripcion=o),required:"",rows:"5",class:"w-full px-3 py-2 border border-gray-300 rounded-lg resize-y min-h-[120px]"},null,512),[[f,s(a).descripcion]])]),e("div",null,[t[34]||(t[34]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Precio (CLP) *",-1)),g(e("input",{"onUpdate:modelValue":t[11]||(t[11]=o=>s(a).precio=o),type:"text",required:"",placeholder:"Ej: 18990",class:"w-full px-3 py-2 border border-gray-300 rounded-lg"},null,512),[[f,s(a).precio]])]),e("div",null,[t[35]||(t[35]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Código / SKU",-1)),g(e("input",{"onUpdate:modelValue":t[12]||(t[12]=o=>s(a).codigoOEM=o),type:"text",class:"w-full px-3 py-2 border border-gray-300 rounded-lg"},null,512),[[f,s(a).codigoOEM]])]),e("div",null,[t[37]||(t[37]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Stock",-1)),g(e("select",{"onUpdate:modelValue":t[13]||(t[13]=o=>s(a).stock=o),class:"w-full px-3 py-2 border border-gray-300 rounded-lg"},[...t[36]||(t[36]=[e("option",{value:!0},"En stock",-1),e("option",{value:!1},"Sin stock",-1)])],512),[[M,s(a).stock]])]),e("div",At,[e("label",Rt," Fotos ("+n(s(a).imagenes.length)+"/"+n(N)+") ",1),e("input",{ref_key:"imagenInput",ref:I,type:"file",multiple:"",accept:"image/jpeg,image/png,image/webp,image/gif,image/avif",class:"block w-full text-sm text-gray-500",disabled:!s(a).categoria||s(a).imagenes.length>=N||s(L),onChange:de},null,40,Pt),s(y)?(i(),l("p",St,n(s(y)),1)):k("",!0),s(a).imagenes.length?(i(),l("div",Mt,[(i(!0),l(w,null,C(s(a).imagenes,(o,d)=>(i(),l("div",{key:o+"-"+d,class:"relative rounded-lg border overflow-hidden bg-slate-50"},[e("img",{src:o,class:"aspect-square w-full object-cover",alt:""},null,8,Ot),e("button",{type:"button",class:"absolute top-1 right-1 w-7 h-7 rounded-full bg-white text-slate-700 shadow",onClick:Lt=>se(d)}," x ",8,Nt)]))),128))])):k("",!0)])]),s(m)?(i(),l("div",{key:0,class:S(["p-4 rounded-lg text-sm",s(m).ok?"bg-green-50 text-green-800":"bg-red-50 text-red-800"])},n(s(m).mensaje),3)):k("",!0),e("div",Vt,[s(v)?(i(),l("button",{key:0,t
1ype:"button",class:"px-6 py-3 bg-gray-200 text-gray-700 rounded-lg font-medium",onClick:ie}," Cancelar ")):k("",!0),e("button",{type:"button",class:"px-6 py-3 bg-gray-200 text-gray-700 rounded-lg font-medium",onClick:P}," Limpiar "),e("button",{type:"submit",disabled:s(E),class:"px-6 py-3 bg-red-600 text-white rounded-lg disabled:opacity-50 font-medium"},n(s(E)?"Guardandoâ¦":s(v)?"Actualizar":"Guardar producto"),9,jt)])],32)]))])}}};export{Dt as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.