import fs from 'node:fs';
import { parse } from 'csv-parse';
import { v4 as uuidv4 } from 'uuid';

export async function importProductsFromCSV(filePath, pool) {
  return new Promise((resolve, reject) => {
    const products = [];

    fs.createReadStream(filePath)
      .pipe(parse({ columns: true, skip_empty_lines: true }))
      .on('data', (row) => {
        products.push({
          id: uuidv4(),
          sku: row.sku,
          name: row.name,
          description: row.description || null,
          category: row.category || null,
        });
      })
      .on('end', async () => {
        try {
          const connection = await pool.getConnection();
          try {
            await connection.beginTransaction();
            for (const product of products) {
              await connection.query(
                'INSERT INTO products (id, sku, name, description, category) VALUES (?, ?, ?, ?, ?)',
                [product.id, product.sku, product.name, product.description, product.category]
              );
              await connection.query(
                'INSERT INTO inventory_levels (id, product_id, quantity) VALUES (?, ?, 0)',
                [uuidv4(), product.id]
              );
            }
            await connection.commit();
            resolve({ imported: products.length });
          } catch (error) {
            await connection.rollback();
            reject(error);
          } finally {
            connection.release();
          }
        } catch (error) {
          reject(error);
        }
      })
      .on('error', reject);
  });
}
