// Script de teste para verificar upload no bucket catalogo
require('dotenv').config();
const { createClient } = require('@supabase/supabase-js');

const supabaseUrl = process.env.SUPABASE_URL;
const supabaseKey = process.env.SUPABASE_SERVICE_KEY || process.env.SUPABASE_ANON_KEY;

if (!supabaseUrl || !supabaseKey) {
  console.error('❌ Variáveis de ambiente não configuradas');
  console.log('SUPABASE_URL:', supabaseUrl ? '✓' : '✗');
  console.log('SUPABASE_KEY:', supabaseKey ? '✓' : '✗');
  process.exit(1);
}

const supabase = createClient(supabaseUrl, supabaseKey);

async function testCatalogoBucket() {
  console.log('🔍 Testando bucket "catalogo"...\n');
  
  try {
    // 1. Verificar se o bucket existe
    console.log('1️⃣ Verificando se bucket existe...');
    const { data: buckets, error: bucketsError } = await supabase
      .storage
      .listBuckets();
    
    if (bucketsError) {
      console.error('❌ Erro ao listar buckets:', bucketsError.message);
      return;
    }
    
    const catalogoBucket = buckets.find(b => b.id === 'catalogo');
    
    if (catalogoBucket) {
      console.log('✅ Bucket "catalogo" existe!');
      console.log('   - ID:', catalogoBucket.id);
      console.log('   - Nome:', catalogoBucket.name);
      console.log('   - Público:', catalogoBucket.public);
      console.log('');
    } else {
      console.log('❌ Bucket "catalogo" NÃO existe!');
      console.log('\n📋 Execute o script SQL para criar:');
      console.log('   sql/setup-bucket-catalogo.sql\n');
      return;
    }
    
    // 2. Testar criação de pasta
    console.log('2️⃣ Testando criação de pasta...');
    const testBuffer = Buffer.from('teste', 'utf-8');
    const testPath = 'produto_test/test.txt';
    
    const { data: uploadData, error: uploadError } = await supabase
      .storage
      .from('catalogo')
      .upload(testPath, testBuffer, {
        contentType: 'text/plain',
        upsert: true
      });
    
    if (uploadError) {
      console.error('❌ Erro ao fazer upload:', uploadError.message);
      console.log('\n💡 Possíveis causas:');
      console.log('   1. Políticas RLS não configuradas');
      console.log('   2. Usando ANON_KEY em vez de SERVICE_KEY');
      console.log('   3. Bucket não é público');
      console.log('\n📋 Execute o script SQL completo:');
      console.log('   sql/setup-bucket-catalogo.sql\n');
      return;
    }
    
    console.log('✅ Upload teste realizado com sucesso!');
    console.log('   - Path:', uploadData.path);
    console.log('');
    
    // 3. Verificar URL pública
    console.log('3️⃣ Verificando URL pública...');
    const { data: urlData } = supabase
      .storage
      .from('catalogo')
      .getPublicUrl(testPath);
    
    console.log('✅ URL pública gerada:');
    console.log('   ', urlData.publicUrl);
    console.log('');
    
    // 4. Listar arquivos
    console.log('4️⃣ Listando arquivos...');
    const { data: files, error: listError } = await supabase
      .storage
      .from('catalogo')
      .list('produto_test');
    
    if (listError) {
      console.error('❌ Erro ao listar:', listError.message);
    } else {
      console.log('✅ Arquivos encontrados:', files.length);
      files.forEach(file => {
        console.log('   -', file.name);
      });
      console.log('');
    }
    
    // 5. Limpar teste
    console.log('5️⃣ Limpando arquivo de teste...');
    const { error: deleteError } = await supabase
      .storage
      .from('catalogo')
      .remove([testPath]);
    
    if (deleteError) {
      console.error('❌ Erro ao deletar:', deleteError.message);
    } else {
      console.log('✅ Arquivo de teste removido');
    }
    
    console.log('\n🎉 TODOS OS TESTES PASSARAM!');
    console.log('\n✅ O bucket "catalogo" está configurado corretamente.');
    console.log('✅ Você pode usar o sistema de fotos adicionais.');
    
  } catch (error) {
    console.error('\n❌ Erro inesperado:', error.message);
    console.error(error);
  }
}

testCatalogoBucket();
