import { createClient } from '@supabase/supabase-js';

const SUPABASE_URL = process.env.SUPABASE_URL || 'https://hwithddwaapyhnfwcesj.supabase.co';
const SUPABASE_KEY = process.env.SUPABASE_SERVICE_KEY || 'sb_publishable_fGXkh0bSrAOqSk2jWKAzSg_NJD9YPCv';
const ALLOWED_ORIGIN = 'https://craze-data-check.vercel.app';

const supabase = createClient(SUPABASE_URL, SUPABASE_KEY);

function setCors(req, res) {
  const origin = req.headers.origin;
  if (origin === ALLOWED_ORIGIN) {
    res.setHeader('Access-Control-Allow-Origin', ALLOWED_ORIGIN);
  }
  res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
  res.setHeader('Vary', 'Origin');
}

export default async function handler(req, res) {
  setCors(req, res);

  if (req.method === 'OPTIONS') {
    return res.status(204).end();
  }

  const origin = req.headers.origin;
  if (origin && origin !== ALLOWED_ORIGIN) {
    return res.status(403).json({ error: 'Forbidden' });
  }

  try {
    if (req.method !== 'POST') {
      return res.status(405).json({ error: 'Method not allowed' });
    }

    const { rows } = req.body;

    if (!rows || !Array.isArray(rows)) {
      return res.status(400).json({ error: 'Missing rows data' });
    }

    const articleNoIdx = 0;

    const productsToUpsert = [];

    for (const row of rows) {
      const productId = String(row[articleNoIdx]);
      if (productId && productId.trim() !== '') {
        productsToUpsert.push({
          product_id: productId,
          data: row,
          status: 'synced',
          updated_at: new Date().toISOString()
        });
      }
    }

    console.log('Upserting', productsToUpsert.length, 'products to Supabase...');

    const { error } = await supabase
      .from('products')
      .upsert(productsToUpsert, {
        onConflict: 'product_id',
        ignoreDuplicates: true
      });

    if (error) {
      console.error('Supabase upsert error:', error);
      return res.status(500).json({ error: error.message, detail: 'Failed to upsert products' });
    }

    return res.json({
      success: true,
      syncedCount: productsToUpsert.length
    });
  } catch (err) {
    console.error('Handler error:', err);
    res.status(500).json({ error: err.message });
  }
}
