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

const supabaseUrl = 'https://ydhzylfnpqlxnzfcclla.supabase.co'
const supabaseAnonKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlkaHp5bGZucHFseG56ZmNjbGxhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjA1NDA1NjIsImV4cCI6MjA3NjExNjU2Mn0.gIHxyAYngqkJ8z2Gt5ESYmG605vhY_LGTQB7Cjp4ZTA'

export const supabase = createClient(supabaseUrl, supabaseAnonKey)

// Configurações dos buckets
export const STORAGE_BUCKETS = {
  PRODUTOS: 'produtos',
  CATALOGO: 'catalogo'
}

// Função para fazer upload de imagem
export const uploadImage = async (file, bucket, path) => {
  try {
    const fileExt = file.name.split('.').pop()
    const fileName = `${Date.now()}_${Math.random().toString(36).substring(2)}.${fileExt}`
    const filePath = path ? `${path}/${fileName}` : fileName

    const { data, error } = await supabase.storage
      .from(bucket)
      .upload(filePath, file)

    if (error) throw error

    // Retornar URL pública
    const { data: publicData } = supabase.storage
      .from(bucket)
      .getPublicUrl(filePath)

    return {
      success: true,
      path: filePath,
      url: publicData.publicUrl
    }
  } catch (error) {
    console.error('Erro ao fazer upload:', error)
    return {
      success: false,
      error: error.message
    }
  }
}

// Função para deletar imagem
export const deleteImage = async (bucket, path) => {
  try {
    const { error } = await supabase.storage
      .from(bucket)
      .remove([path])

    if (error) throw error

    return { success: true }
  } catch (error) {
    console.error('Erro ao deletar imagem:', error)
    return {
      success: false,
      error: error.message
    }
  }
}

// Função para obter URL pública
export const getPublicUrl = (bucket, path) => {
  const { data } = supabase.storage
    .from(bucket)
    .getPublicUrl(path)
  
  return data.publicUrl
}

// Função para login por telefone (WhatsApp)
export const loginWithPhone = async (phone, password) => {
  try {
    // Primeiro, verificar se o cliente existe
    const { data: cliente, error: clienteError } = await supabase
      .from('clientes')
      .select('*')
      .eq('whatsapp', phone)
      .single()

    if (clienteError || !cliente) {
      throw new Error('Cliente não encontrado')
    }

    // Para simplificar, vamos usar o ID do cliente como "senha"
    // Em produção, você deve implementar um sistema de autenticação mais robusto
    const { data, error } = await supabase.auth.signInWithPassword({
      email: `${phone}@catalogo.local`, // Email fictício baseado no telefone
      password: password || cliente.id // Usar ID como senha temporária
    })

    if (error) throw error

    return {
      success: true,
      user: data.user,
      cliente: cliente
    }
  } catch (error) {
    console.error('Erro no login:', error)
    return {
      success: false,
      error: error.message
    }
  }
}

// Função para registrar cliente
export const registerClient = async (clienteData) => {
  try {
    // Inserir cliente na tabela
    const { data: cliente, error: clienteError } = await supabase
      .from('clientes')
      .insert([clienteData])
      .select()
      .single()

    if (clienteError) throw clienteError

    // Criar usuário de autenticação
    const { data: authData, error: authError } = await supabase.auth.signUp({
      email: `${clienteData.whatsapp}@catalogo.local`,
      password: cliente.id, // Usar ID como senha temporária
      options: {
        data: {
          cliente_id: cliente.id,
          nome: clienteData.nome_completo,
          whatsapp: clienteData.whatsapp
        }
      }
    })

    if (authError) throw authError

    return {
      success: true,
      cliente: cliente,
      user: authData.user
    }
  } catch (error) {
    console.error('Erro no registro:', error)
    return {
      success: false,
      error: error.message
    }
  }
}

// Função para logout
export const logout = async () => {
  try {
    const { error } = await supabase.auth.signOut()
    if (error) throw error
    return { success: true }
  } catch (error) {
    console.error('Erro no logout:', error)
    return {
      success: false,
      error: error.message
    }
  }
}

// Função para obter usuário atual
export const getCurrentUser = async () => {
  try {
    const { data: { user }, error } = await supabase.auth.getUser()
    if (error) throw error

    if (user) {
      // Buscar dados completos do cliente
      const { data: cliente, error: clienteError } = await supabase
        .from('clientes')
        .select('*')
        .eq('id', user.user_metadata.cliente_id)
        .single()

      if (clienteError) throw clienteError

      return {
        success: true,
        user: user,
        cliente: cliente
      }
    }

    return { success: true, user: null, cliente: null }
  } catch (error) {
    console.error('Erro ao obter usuário:', error)
    return {
      success: false,
      error: error.message
    }
  }
}

export default supabase
