package com.example.boidelov3.utils;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

/**
 * Utilitaire centralisé pour la gestion des erreurs
 * Fournit des méthodes cohérentes pour logger et afficher les erreurs
 */
public class ErrorHandler {

    private static final String DEFAULT_TAG = "BoideloError";

    /**
     * Logger une erreur avec un TAG personnalisé
     * @param tag Le tag pour les logs
     * @param message Message descriptif de l'erreur
     * @param throwable L'exception capturée
     */
    public static void logError(String tag, String message, Throwable throwable) {
        Log.e(tag, message, throwable);
    }

    /**
     * Logger une erreur avec le TAG par défaut
     * @param message Message descriptif de l'erreur
     * @param throwable L'exception capturée
     */
    public static void logError(String message, Throwable throwable) {
        Log.e(DEFAULT_TAG, message, throwable);
    }

    /**
     * Logger une erreur et afficher un Toast à l'utilisateur
     * @param context Le contexte de l'application
     * @param tag Le tag pour les logs
     * @param logMessage Message technique pour les logs
     * @param userMessage Message convivial pour l'utilisateur
     * @param throwable L'exception capturée
     */
    public static void showError(Context context, String tag, String logMessage,
                                 String userMessage, Throwable throwable) {
        logError(tag, logMessage, throwable);
        Toast.makeText(context, userMessage, Toast.LENGTH_LONG).show();
    }

    /**
     * Logger une erreur et afficher un Toast à l'utilisateur (TAG par défaut)
     * @param context Le contexte de l'application
     * @param logMessage Message technique pour les logs
     * @param userMessage Message convivial pour l'utilisateur
     * @param throwable L'exception capturée
     */
    public static void showError(Context context, String logMessage,
                                 String userMessage, Throwable throwable) {
        showError(context, DEFAULT_TAG, logMessage, userMessage, throwable);
    }

    /**
     * Logger une erreur sans afficher de Toast
     * @param tag Le tag pour les logs
     * @param message Message descriptif de l'erreur
     * @param throwable L'exception capturée
     */
    public static void logErrorOnly(String tag, String message, Throwable throwable) {
        logError(tag, message, throwable);
    }

    /**
     * Créer un message d'erreur détaillé pour les logs avec contexte
     * @param operation L'opération qui a échoué
     * @param details Détails supplémentaires sur l'erreur
     * @return Message formaté pour les logs
     */
    public static String buildErrorMessage(String operation, String details) {
        if (details != null && !details.isEmpty()) {
            return operation + " - " + details;
        }
        return operation;
    }

    /**
     * Échapper une chaîne de caractères pour l'utiliser en toute sécurité dans HTML
     * @param input La chaîne à échapper
     * @return La chaîne échappée
     */
    public static String escapeHtml(String input) {
        if (input == null) {
            return "";
        }
        return input
                .replace("&", "&amp;")
                .replace("<", "&lt;")
                .replace(">", "&gt;")
                .replace("\"", "&quot;")
                .replace("'", "&#39;");
    }
}
