// Verificacion del onboarding: registro libre -> config -> publicar -> visible.
import { createClient } from '@supabase/supabase-js';

const URL = process.env.VITE_SUPABASE_URL || 'http://127.0.0.1:54321';
const ANON =
  process.env.VITE_SUPABASE_ANON_KEY || process.env.SUPABASE_ANON_KEY || '';

let fallos = 0;
const check = (cond, msg) => {
  console.log((cond ? '  OK  ' : '  XX  ') + msg);
  if (!cond) fallos++;
};
const nuevo = () => createClient(URL, ANON, { auth: { persistSession: false } });

const email = `dueno.test.${Date.now()}@gustito-express.test`;
const owner = nuevo();

// 1) Registro libre (signup)
const { data: su, error: eSu } = await owner.auth.signUp({
  email,
  password: 'Test1234',
  options: { data: { nombre: 'Dueno Test' } },
});
check(!eSu && !!su.session, 'Registro crea sesion del dueno ' + (eSu?.message ?? ''));

// 2) Crear el negocio (rol pasa a dueno + slug unico)
const { data: cr, error: eCr } = await owner.rpc('crear_restaurante', {
  p_nombre: 'Pizzeria Test',
  p_telefono: '04141112233',
});
check(!eCr && !!cr?.[0]?.restaurante_id, 'crear_restaurante ' + (eCr?.message ?? ''));
const restId = cr[0].restaurante_id;
const slug = cr[0].slug;
check(slug === 'pizzeria-test', 'Slug generado automaticamente: ' + slug);

// 3) La tienda NO es visible antes de publicar
const anon = nuevo();
let vis = await anon.from('restaurantes').select('id').eq('slug', slug).eq('activo', true).eq('publicado', true).maybeSingle();
check(!vis.data, 'La tienda NO es visible antes de publicar');

// 4) Configurar perfil + pagos + delivery
let r = await owner
  .from('restaurantes')
  .update({
    descripcion: 'La mejor pizza de Acarigua',
    tasa_bs: 40,
    metodos_pago: { pago_movil: { activo: true, banco: '0102', cedula: 'V-1', telefono: '0414' }, efectivo: { activo: true } },
    hace_delivery: true,
    costo_delivery_usd: 2,
  })
  .eq('id', restId);
check(!r.error, 'Dueno configura perfil/pagos/delivery ' + (r.error?.message ?? ''));

// 5) Cargar menu (categoria + producto)
const cat = await owner.from('categorias').insert({ restaurante_id: restId, nombre: 'Pizzas', orden: 1 }).select().single();
check(!cat.error, 'Crea categoria ' + (cat.error?.message ?? ''));
const prod = await owner
  .from('productos')
  .insert({ restaurante_id: restId, categoria_id: cat.data.id, nombre: 'Pizza Margarita', precio_usd: 8, disponible: true })
  .select()
  .single();
check(!prod.error, 'Crea producto ' + (prod.error?.message ?? ''));

// 6) Publicar
r = await owner.from('restaurantes').update({ publicado: true, onboarding_completo: true }).eq('id', restId);
check(!r.error, 'Publica la tienda');

// 7) Ahora SI es visible
vis = await anon.from('restaurantes').select('id,nombre').eq('slug', slug).eq('activo', true).eq('publicado', true).maybeSingle();
check(!!vis.data, 'La tienda YA es visible tras publicar');

// 8) Y ya recibe pedidos
const { data: ped, error: ePed } = await anon.rpc('crear_pedido', {
  p_restaurante_id: restId,
  p_cliente_nombre: 'Comensal',
  p_cliente_telefono: '04141234567',
  p_tipo_entrega: 'pickup',
  p_metodo_pago: 'efectivo',
  p_items: [{ producto_id: prod.data.id, cantidad: 1 }],
});
check(!ePed && !!ped?.[0]?.pedido_id, 'La tienda publicada recibe pedidos ' + (ePed?.message ?? ''));

console.log('\n' + (fallos === 0 ? 'ONBOARDING OK' : `${fallos} FALLO(S)`));
process.exit(fallos === 0 ? 0 : 1);
