/**
 * Utilitário para traduzir mensagens de erro do Appwrite e outras APIs para PT-BR
 */

export const translateError = (error: any): string => {
  const message = error?.message || error?.toString() || "Erro desconhecido";
  
  // Erros específicos do Appwrite
  if (message.includes("Invalid 'password' param")) {
    if (message.includes("Password must be between 8 and 265 characters long")) {
      return "A senha deve ter entre 8 e 265 caracteres.";
    }
    if (message.includes("should not be one of the commonly used password")) {
      return "Esta senha é muito comum. Escolha uma senha mais segura.";
    }
    return "Senha inválida. Verifique os requisitos de segurança.";
  }
  
  if (message.includes("Invalid 'email' param")) {
    return "Email inválido. Verifique o formato do endereço de email.";
  }
  
  if (message.includes("Invalid 'name' param")) {
    return "Nome inválido. O nome deve ter pelo menos 1 caractere.";
  }
  
  if (message.includes("User (role: guests) missing scope")) {
    return "Você não tem permissão para realizar esta ação.";
  }
  
  if (message.includes("Invalid credentials") || message.includes("Invalid email or password")) {
    return "Email ou senha incorretos.";
  }
  
  if (message.includes("User with the same id, email, or phone already exists") || 
      message.includes("A user with the same id, email, or phone already exists")) {
    return "Já existe uma conta com este email ou telefone.";
  }
  
  // Adicionar mais traduções específicas do Appwrite
  if (message.includes("User not found")) {
    return "Usuário não encontrado.";
  }
  
  if (message.includes("Document not found")) {
    return "Documento não encontrado.";
  }
  
  if (message.includes("Collection not found")) {
    return "Coleção não encontrada.";
  }
  
  if (message.includes("Database not found")) {
    return "Base de dados não encontrada.";
  }
  
  if (message.includes("Project not found")) {
    return "Projeto não encontrado.";
  }
  
  if (message.includes("Invalid API key")) {
    return "Chave de API inválida.";
  }
  
  if (message.includes("Missing or invalid permissions")) {
    return "Permissões ausentes ou inválidas.";
  }
  
  if (message.includes("Document already exists")) {
    return "Documento já existe.";
  }
  
  if (message.includes("Invalid document structure")) {
    return "Estrutura do documento inválida.";
  }
  
  if (message.includes("Rate limit for the current endpoint exceeded")) {
    return "Muitas tentativas. Tente novamente em alguns minutos.";
  }
  
  if (message.includes("Network request failed") || message.includes("Failed to fetch")) {
    return "Erro de conexão. Verifique sua internet e tente novamente.";
  }
  
  if (message.includes("session is prohibited")) {
    return "Você já está logado. Redirecionando...";
  }
  
  if (message.includes("Account not found")) {
    return "Conta não encontrada. Verifique seu email.";
  }
  
  if (message.includes("Password reset required")) {
    return "É necessário redefinir sua senha.";
  }
  
  // Erros de autorização genéricos
  if (message.includes("unauthorized") || message.includes("Unauthorized")) {
    return "Você não está autorizado a realizar esta ação.";
  }
  
  if (message.includes("Forbidden") || message.includes("forbidden")) {
    return "Acesso negado. Você não tem permissão para esta operação.";
  }
  
  // Erros de validação genéricos
  if (message.includes("required") || message.includes("Required")) {
    return "Campos obrigatórios não foram preenchidos.";
  }
  
  if (message.includes("Invalid") || message.includes("invalid")) {
    return "Dados inválidos. Verifique as informações fornecidas.";
  }
  
  // Erros de servidor
  if (message.includes("Internal Server Error") || message.includes("500")) {
    return "Erro interno do servidor. Tente novamente em alguns minutos.";
  }
  
  if (message.includes("Service Unavailable") || message.includes("503")) {
    return "Serviço temporariamente indisponível. Tente novamente mais tarde.";
  }
  
  if (message.includes("Not Found") || message.includes("404")) {
    return "Recurso não encontrado.";
  }
  
  // Erros específicos de contexto já em português - manter como estão
  const portugueseMessages = [
    "A data de vencimento não pode ser anterior à data atual",
    "Adicione produtos ao carrinho antes de finalizar a compra", 
    "Erro ao carregar pedido",
    "Erro ao carregar produtos do pedido",
    "Erro ao adicionar produto ao carrinho",
    "Estoque máximo atingido",
    "Item removido do carrinho, mas erro ao restaurar estoque",
    "Não foi possível atualizar a quantidade",
    "Erro ao atualizar quantidade",
    "Erro ao atualizar produto"
  ];
  
  for (const ptMessage of portugueseMessages) {
    if (message.includes(ptMessage)) {
      return message;
    }
  }
  
  // Se a mensagem já está em português (contém acentos ou palavras específicas)
  if (message.match(/[áàâãéèêíïóôõöúçñü]/i) || 
      message.includes("Erro") || 
      message.includes("erro") ||
      message.includes("não") ||
      message.includes("falha")) {
    return message;
  }
  
  // Para erros não mapeados, retornar uma mensagem genérica em português
  if (message.toLowerCase().includes("error") || 
      message.toLowerCase().includes("failed") ||
      message.toLowerCase().includes("problem")) {
    return "Ocorreu um erro inesperado. Tente novamente.";
  }
  
  // Retornar mensagem original se não conseguir traduzir
  return message;
};

/**
 * Hook para usar em components que precisam de tradução de erros
 */
export const useErrorTranslation = () => {
  return { translateError };
};