package com.example.vdcscore.utils;

import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException;
import com.google.firebase.auth.FirebaseAuthInvalidUserException;
import com.google.firebase.auth.FirebaseAuthUserCollisionException;
import com.google.firebase.auth.FirebaseAuthWeakPasswordException;
import com.google.firebase.FirebaseNetworkException;

public class FirebaseErrorUtils {

    public static String getErrorMessagePt(Exception exception) {
        if (exception == null) {
            return "Ocorreu um erro desconhecido.";
        }

        if (exception instanceof FirebaseAuthInvalidCredentialsException) {
            return "O e-mail ou a palavra-passe estão incorretos.";
        }

        if (exception instanceof FirebaseAuthInvalidUserException) {
            String errorCode = ((FirebaseAuthInvalidUserException) exception).getErrorCode();
            if ("ERROR_USER_DISABLED".equals(errorCode)) {
                return "Esta conta de utilizador foi desativada.";
            }
            return "Não existe nenhuma conta registada com este e-mail.";
        }

        if (exception instanceof FirebaseAuthUserCollisionException) {
            return "Já existe uma conta registada com este e-mail.";
        }

        if (exception instanceof FirebaseAuthWeakPasswordException) {
            return "A palavra-passe introduzida é demasiado fraca. Introduza pelo menos 6 caracteres.";
        }

        if (exception instanceof FirebaseNetworkException) {
            return "Sem ligação à internet. Por favor, verifique a sua rede.";
        }

        // Fallbacks baseados na mensagem da exceção
        String message = exception.getMessage();
        if (message != null) {
            String lowerMessage = message.toLowerCase();
            if (lowerMessage.contains("badly formatted") || lowerMessage.contains("invalid email")) {
                return "O formato do e-mail introduzido é inválido.";
            }
            if (lowerMessage.contains("no user record") || lowerMessage.contains("user not found") || lowerMessage.contains("user-not-found")) {
                return "Não existe nenhuma conta registada com este e-mail.";
            }
            if (lowerMessage.contains("wrong password") || lowerMessage.contains("invalid password") || lowerMessage.contains("wrong-password")) {
                return "O e-mail ou a palavra-passe estão incorretos.";
            }
            if (lowerMessage.contains("email already in use") || lowerMessage.contains("already exists") || lowerMessage.contains("email-already-in-use")) {
                return "Já existe uma conta registada com este e-mail.";
            }
            if (lowerMessage.contains("network") || lowerMessage.contains("connection")) {
                return "Sem ligação à internet. Por favor, verifique a sua rede.";
            }
            if (lowerMessage.contains("recent login required")) {
                return "Por segurança, precisa de terminar sessão e voltar a entrar para realizar esta alteração.";
            }
        }

        return "Erro: " + (message != null ? message : "desconhecido.");
    }

    public static String sanitizeKey(String key) {
        if (key == null) return null;
        return key.replace(".", "_")
                  .replace("#", "_")
                  .replace("$", "_")
                  .replace("[", "_")
                  .replace("]", "_")
                  .replace("/", "_");
    }
}
