const API='../api/';let productos=[],categorias=[];const $=s=>document.querySelector(s);async function req(route,opt={}){const r=await fetch(API+route,{credentials:'include',headers:{'Content-Type':'application/json'},...opt});const j=await r.json();if(!r.ok)throw new Error(j.mensaje||'Error');return j}async function check(){const me=await req('auth/me');if(me.usuario?.rol==='administrador')show();}async function show(){$('#loginBox').hidden=true;$('#app').hidden=false;categorias=await req('categorias');$('#categoria').innerHTML=categorias.map(c=>`<option value="${c.id}">${c.nombre}</option>`).join('');await load();}async function load(){const s=await req('admin/resumen');$('#stats').innerHTML=Object.entries({Productos:s.productos,Activos:s.activos,'Stock bajo':s.stock_bajo,Pedidos:s.pedidos}).map(([k,v])=>`<div class="stat"><span>${k}</span><b>${v}</b></div>`).join('');productos=await req('admin/productos');render(productos)}function render(list){$('#rows').innerHTML=list.map(p=>`<tr><td><img src="../${p.imagenes[0]}"></td><td><b>${p.nombre}</b><br><small>${p.codigo||p.id}</small></td><td>${p.categoria}</td><td>S/ ${p.precio.toFixed(2)}</td><td>${p.stock}</td><td>${p.estado}</td><td class="actions"><button class="edit" onclick="edit(${p.dbId})">Editar</button><button class="delete" onclick="del(${p.dbId})">Eliminar</button></td></tr>`).join('')||'<tr><td colspan="7">No hay productos</td></tr>'}$('#login').onclick=async()=>{try{const r=await req('auth/login',{method:'POST',body:JSON.stringify({email:$('#email').value,password:$('#password').value})});if(r.usuario.rol!=='administrador')throw new Error('Este usuario no es administrador.');show()}catch(e){$('#loginMsg').textContent=e.message}};$('#logout').onclick=async()=>{await req('auth/logout',{method:'POST'});location.reload()};$('#search').oninput=e=>render(productos.filter(p=>p.nombre.toLowerCase().includes(e.target.value.toLowerCase())));$('#newProduct').onclick=()=>{if($('#app').hidden)return;$('#productForm').reset();$('#dbId').value='';$('#codigo').disabled=false;$('#formTitle').textContent='Nuevo producto';$('#modal').showModal()};$('#close').onclick=()=>$('#modal').close();window.edit=id=>{const p=productos.find(x=>x.dbId===id);$('#dbId').value=id;$('#codigo').value=p.id;$('#codigo').disabled=true;$('#categoria').value=categorias.find(c=>c.slug===p.categoria)?.id||'';$('#nombre').value=p.nombre;$('#marca').value=p.marca;$('#precio').value=p.precio;$('#precioAnterior').value=p.precioAnterior||'';$('#stock').value=p.stock;$('#estado').value=p.estado;$('#descripcion').value=p.descripcion;$('#tags').value=p.tags.join(', ');$('#imagenes').value=p.imagenes.join('\n');$('#destacado').checked=p.etiquetas.includes('destacado');$('#nuevo').checked=p.etiquetas.includes('nuevo');$('#oferta').checked=p.etiquetas.includes('oferta');$('#masVendido').checked=p.etiquetas.includes('mas-vendido');$('#formTitle').textContent='Editar producto';$('#modal').showModal()};window.del=async id=>{if(!confirm('¿Eliminar o desactivar este producto?'))return;alert((await req('admin/productos/'+id,{method:'DELETE'})).mensaje);load()};$('#productForm').onsubmit=async e=>{e.preventDefault();const id=$('#dbId').value;const body={codigo:$('#codigo').value,categoria_id:+$('#categoria').value,nombre:$('#nombre').value,marca:$('#marca').value,precio:+$('#precio').value,precio_anterior:$('#precioAnterior').value?+$('#precioAnterior').value:null,stock:+$('#stock').value,estado:$('#estado').value,descripcion:$('#descripcion').value,tags:$('#tags').value,imagenes:$('#imagenes').value.split('\n').filter(Boolean),destacado:$('#destacado').checked,nuevo:$('#nuevo').checked,oferta:$('#oferta').checked,mas_vendido:$('#masVendido').checked};try{await req('admin/productos'+(id?'/'+id:''),{method:id?'PUT':'POST',body:JSON.stringify(body)});$('#modal').close();load()}catch(err){$('#formMsg').textContent=err.message}};check().catch(()=>{});