// v2 data: extends soflo-data.jsx (loaded before) with admin, settings, audit, notifications, i18n
const baseSeed = window.seedState;
const V2_USERS = [
  { id:'u1', name:'Mark Sutton', role:'manager', email:'mark@soflolg.com', password:'demo', active:true, joined:'2026-01-12' },
  { id:'u2', name:'Laura Parker', role:'finance', email:'laura@soflolg.com', password:'demo', active:true, joined:'2026-02-03' },
  { id:'u3', name:'Emily Nash', role:'admin', email:'emily@soflolg.com', password:'demo', active:true, joined:'2025-11-20' },
  { id:'u4', name:'David Reed', role:'manager', email:'david@soflolg.com', password:'demo', active:false, joined:'2026-03-15' },
];
const DEFAULT_SETTINGS = { company:'SofloLG', currency:'USD', symbol:'$', staleDays:5, overdueGrace:0, netDays:14 };

const seedAudit = (s) => {
  const a = [];
  s.orders.forEach(o => o.history.forEach(h => a.push({ at:h.at, by:h.by, role:'manager', action:h.event, target:o.id, kind:'order' })));
  s.containers.forEach(c => c.notes.forEach(n => a.push({ at:n.at, by:n.by, role:'manager', action:n.text, target:c.id, kind:'container' })));
  a.push({ at:new Date(TODAY.getTime()-86400000*20).toISOString(), by:'Emily Nash', role:'admin', action:'Deactivated user David Reed', target:'u4', kind:'team' });
  a.push({ at:new Date(TODAY.getTime()-86400000*45).toISOString(), by:'Emily Nash', role:'admin', action:'Stale threshold set to 5 days', target:'settings', kind:'settings' });
  return a.sort((x, y) => new Date(y.at) - new Date(x.at));
};
// Older closed orders so analytics has 90 days of history
const extraOrders = () => {
  const mk = (id, clientId, supplierId, daysBack, total, supplier, status, late) => ({ id, clientId, supplierId, priority:'Normal', requestedDate:new Date(TODAY.getTime()-86400000*(daysBack-25)).toISOString().slice(0,10), containerId:null, status, paid:true, paidAt:new Date(TODAY.getTime()-86400000*(daysBack-10)).toISOString(), createdAt:new Date(TODAY.getTime()-86400000*daysBack).toISOString(), updatedAt:new Date(TODAY.getTime()-86400000*(daysBack-30)).toISOString(),
    items:[{desc:'Mixed materials lot', qty:1, unit:'lot', cost:supplier, price:total}], deliveredLate:late,
    history:[{at:new Date(TODAY.getTime()-86400000*daysBack).toISOString(), event:'Order created', by:'Mark Sutton'},{at:new Date(TODAY.getTime()-86400000*(daysBack-1)).toISOString(), event:'Confirmed · split locked', by:'Mark Sutton'},{at:new Date(TODAY.getTime()-86400000*(daysBack-30)).toISOString(), event:status, by:'Mark Sutton'}],
    split:{ total, supplier, margin:total-supplier, lockedAt:new Date(TODAY.getTime()-86400000*(daysBack-1)).toISOString() } });
  return [
    mk('SO-1022','c1','s1',150,38400,31200,'Delivered',false), mk('SO-1025','c2','s5',140,12600,9800,'Delivered',true), mk('SO-1028','c3','s4',132,27900,21100,'Delivered',false),
    mk('SO-1031','c4','s3',120,19800,15400,'Delivered',false), mk('SO-1033','c1','s2',112,22400,17300,'Delivered',true), mk('SO-1036','c2','s1',104,41200,33900,'Delivered',false),
    mk('SO-1038','c3','s5',98,9400,7100,'Cancelled',false), mk('SO-1039','c1','s1',90,30100,24600,'Delivered',false), mk('SO-1043','c4','s3',82,15700,12300,'Delivered',true),
    mk('SO-1044','c2','s2',78,26300,20200,'Delivered',false), mk('SO-1049','c3','s4',66,33800,26000,'Delivered',false), mk('SO-1050','c1','s5',60,8800,6900,'Delivered',false),
  ];
};
const seedState2 = () => { const s = baseSeed(); s.users = V2_USERS; s.orders = [...extraOrders(), ...s.orders]; s.settings = { ...DEFAULT_SETTINGS }; s.audit = seedAudit(s); s.readNotes = {}; return s; };

// Settings-aware risk (overrides soflo-data version)
window.__settings = { ...DEFAULT_SETTINGS };
const containerRisk2 = (c) => {
  if (c.status === 'Delivered') return null;
  if (c.status === 'Stuck') return { level:'high', label:'Stuck' };
  if (isPast(c.eta)) return { level:'high', label:`${-daysUntil(c.eta)}d past ETA` };
  const stale = daysSince(c.updatedAt); const th = window.__settings.staleDays || 5;
  if (stale >= th) return { level:'warn', label:`No update ${stale}d` };
  return null;
};

// Client notifications derived from order history + container notes
const clientNotifications = (st, clientId) => {
  const orders = st.orders.filter(o => o.clientId === clientId && o.status !== 'Draft');
  const out = [];
  orders.forEach(o => o.history.filter(h => !/split|purchased|created/i.test(h.event)).forEach(h => out.push({ id:o.id+'|'+h.at, at:h.at, title:o.id, text:h.event.replace(/ · .*$/, ''), kind:'order', ref:{ view:'order', id:o.id } })));
  const cids = [...new Set(orders.map(o => o.containerId).filter(Boolean))];
  st.containers.filter(c => cids.includes(c.id)).forEach(c => c.notes.forEach(n => out.push({ id:c.id+'|'+n.at, at:n.at, title:c.id, text:n.text, kind:'container', ref:{ view:'container', id:c.id } })));
  return out.sort((a, b) => new Date(b.at) - new Date(a.at)).slice(0, 30);
};

// i18n
const ES = {
  'Billing':'Facturación','Invoices':'Facturas','Invoice':'Factura','Issued':'Emitida','Due':'Vence','Balance':'Saldo','Balance due':'Saldo pendiente','Paid to date':'Pagado a la fecha','Overdue':'Vencida','Partially paid':'Pago parcial','Sent':'Enviada','Void':'Anulada','Live map':'Mapa en vivo',
  'Dashboard':'Panel','Orders':'Pedidos','Containers':'Contenedores','Finance':'Finanzas','Analytics':'Analítica','Admin':'Administración','Your orders':'Tus pedidos','Inbox':'Bandeja',
  'Sign out':'Cerrar sesión','Reset demo data':'Restablecer datos','Signed in as':'Sesión de','Search client, order ID or container…':'Buscar cliente, pedido o contenedor…','Read-only portal · call us for changes':'Portal de solo lectura · llámanos para cambios',
  'New order':'Nuevo pedido','New container':'Nuevo contenedor','Active orders':'Pedidos activos','Not yet purchased':'Sin comprar','Containers at risk':'Contenedores en riesgo','Overdue orders':'Pedidos atrasados','Needs action':'Requiere acción','Margin by client':'Margen por cliente','All orders':'Todos los pedidos','All containers':'Todos los contenedores','Nothing waiting on you.':'Nada pendiente.',
  'Order':'Pedido','Client':'Cliente','Items':'Artículos','Status':'Estado','Requested':'Solicitado','Container':'Contenedor','Client total':'Total cliente','Payment':'Pago','Route':'Ruta','Linked':'Vinculados','Last update':'Última actualización','Risk':'Riesgo','Amount':'Importe','Updated':'Actualizado','Paid':'Pagado','Unpaid':'Sin pagar','Open':'Abierto','Pending':'Pendiente','Rush':'Urgente',
  'Draft':'Borrador','Confirmed':'Confirmado','Purchased':'Comprado','In Production':'En producción','Shipped':'Enviado','In Transit':'En tránsito','Arrived':'Llegó','Delivered':'Entregado','Stuck':'Atascado','Cancelled':'Cancelado',
  'Booked':'Reservado','Loading':'Cargando','Departed':'Zarpó','At Sea':'En el mar','At Port':'En puerto','Customs Hold':'Retenido en aduana',
  'Description':'Descripción','Qty':'Cant.','Unit':'Unidad','Unit price':'Precio unitario','Total':'Total','Order total':'Total del pedido','Updates':'Actualizaciones','Invoice open':'Factura abierta','Received':'Recibido','Requested delivery':'Entrega solicitada','Not yet assigned to a container.':'Aún sin contenedor asignado.',
  'Current':'Actual','Departure':'Salida','Estimated arrival':'Llegada estimada','Arrival (est.)':'Llegada (est.)','Your orders on this container':'Tus pedidos en este contenedor','Shipping updates':'Novedades del envío','Show delivered':'Mostrar entregados','Open orders':'Pedidos abiertos','Containers in motion':'Contenedores en curso','Invoices open':'Facturas abiertas','Your containers':'Tus contenedores','No containers yet.':'Aún no hay contenedores.',
  'Notifications':'Notificaciones','Mark all read':'Marcar todo leído','No updates yet.':'Sin novedades.','New':'Nuevo','Back':'Volver',
  'Line items':'Líneas','Details':'Detalles','History':'Historial','Payment split':'Reparto del pago','Client pays':'Cliente paga','Pay supplier':'Pagar proveedor','Margin':'Margen','Supplier':'Proveedor','Priority':'Prioridad','Confirm order':'Confirmar pedido','Mark paid by client':'Marcar pagado por cliente','Edit':'Editar','Save':'Guardar','Save draft':'Guardar borrador','Cancel order':'Cancelar pedido','Delete order':'Eliminar pedido',
  'Payment splits':'Repartos de pago','To pay suppliers':'A pagar a proveedores','Margin retained':'Margen retenido','Awaiting client payment':'Pendiente de cobro','Locked splits':'Repartos bloqueados','Export supplier payments (CSV)':'Exportar pagos a proveedores (CSV)',
  'Team':'Equipo','Directory':'Directorio','Audit log':'Registro de auditoría','Settings':'Ajustes','Invite user':'Invitar usuario','Deactivate':'Desactivar','Reactivate':'Reactivar','Clients & suppliers':'Clientes y proveedores','Export full data':'Exportar todos los datos',
  'Demo mode':'Modo demo','Guided tour':'Recorrido guiado','Journey map':'Mapa de recorrido','Auto-play':'Reproducción automática','Exit demo':'Salir del demo','Next':'Siguiente','Done':'Listo','Pause':'Pausar','Play':'Reproducir','Stop':'Detener','Start demo':'Iniciar demo','Sign in':'Iniciar sesión','Email':'Correo','Password':'Contraseña','Demo accounts':'Cuentas demo',
  'Sign in to see where your materials are, what you owe, and what has shipped — without calling.':'Inicia sesión para ver dónde están tus materiales, qué debes y qué se envió, sin llamar.',
};
window.__lang = localStorage.getItem('soflolg-lang') || 'en';
const t = (k) => (window.__lang === 'es' && ES[k]) || k;

Object.assign(window, { seedState2, DEFAULT_SETTINGS, containerRisk: containerRisk2, clientNotifications, t, ES });
