export type OrderEvent = {
  eventId: string;
  orderId: string;
  items: { sku: string; quantity: number }[];
};

/** In-memory demonstration for a single import batch; not a production queue. */
export function reconcileEvents(events: OrderEvent[]) {
  const accepted: OrderEvent[] = [];
  const duplicates: OrderEvent[] = [];
  const rejected: { event: OrderEvent; reason: string }[] = [];
  const seen = new Map<string, string>();
  for (const event of events) {
    if (!event.orderId?.trim() || !event.eventId?.trim()) {
      rejected.push({ event, reason: "Missing order or event ID" });
      continue;
    }
    if (!Array.isArray(event.items) || !event.items.length || event.items.some(item => !item.sku?.trim() || !Number.isSafeInteger(item.quantity) || item.quantity < 1)) {
      rejected.push({ event, reason: "Missing SKU or invalid quantity" });
      continue;
    }
    const normalized = { ...event, orderId: event.orderId.trim(), items: event.items.map(item => ({ sku: item.sku.trim(), quantity: item.quantity })) };
    const signature = JSON.stringify([...normalized.items].sort((a,b) => a.sku.localeCompare(b.sku) || a.quantity-b.quantity));
    const previous = seen.get(normalized.orderId);
    if (previous !== undefined) {
      if (previous === signature) duplicates.push(event);
      else rejected.push({ event, reason: "Order changed. Review required" });
      continue;
    }
    seen.set(normalized.orderId, signature);
    accepted.push(normalized);
  }
  return { accepted, duplicates, rejected };
}

export const sampleEvents: OrderEvent[] = [
  { eventId: "evt-001", orderId: "A-1042", items: [{ sku: "TEE-NAVY-M", quantity: 2 }] },
  { eventId: "evt-002", orderId: "A-1042", items: [{ sku: "TEE-NAVY-M", quantity: 2 }] },
  { eventId: "evt-003", orderId: "A-1043", items: [{ sku: "TOTE-BLUE", quantity: 1 }] },
  { eventId: "evt-004", orderId: "A-1044", items: [{ sku: "", quantity: 1 }] },
];
