import * as XLSX from 'xlsx';
import { ParsedEDILine } from '@/types';

export function parseSigniaEDI(buffer: ArrayBuffer): ParsedEDILine[] {
  const workbook = XLSX.read(buffer, { type: 'array' });
  const sheetName = workbook.SheetNames[0];
  const sheet = workbook.Sheets[sheetName];
  const rows = XLSX.utils.sheet_to_json<Record<string, unknown>>(sheet, { defval: '' });

  const lines: ParsedEDILine[] = [];

  for (const row of rows) {
    const famille = String(row['Famille'] ?? '').trim();
    // Famille filtering moved to filterEDILines for category support

    const sign = String(row['Signe'] ?? '+').trim();
    // Skip credit notes (avoirs)
    if (sign === '-') continue;

    const priceRaw = row['PrixUnitaireNet'];
    const unitPrice = typeof priceRaw === 'number' ? priceRaw : parseFloat(String(priceRaw).replace(',', '.'));
    if (isNaN(unitPrice) || unitPrice <= 0) continue;

    // Parse discount: "79,00" → 79
    const discountRaw = String(row['Remise%'] ?? '0');
    const discount = parseFloat(discountRaw.replace(',', '.')) || 0;

    const quantity = Number(row['Quantité']) || 1;

    lines.push({
      centre_code: String(row['CompteClient'] ?? '').trim(),
      centre_name: String(row['NomCentre'] ?? '').trim(),
      code_article: String(row['CodeArticle'] ?? '').trim(),
      description: String(row['DescriptionArticle'] ?? '').trim(),
      quantity,
      unit_price: Math.round(unitPrice * 100) / 100,
      discount_pct: discount,
      invoice_number: String(row['NuméroFacture'] ?? '').trim(),
      invoice_date: String(row['DateFacture'] ?? '').trim(),
      sign,
      famille,
    });
  }

  return lines;
}
