using System.Text;

namespace Sunfish;

/// <summary>Juegos de caracteres antiguos (CP437, MacRoman...) a traves de CodePagesEncodingProvider.</summary>
public static class Encodings
{
    // Los inicializadores estaticos se ejecutan en orden: el proveedor se registra antes de pedir nada.
    private static readonly bool Registered = Register();

    /// <summary>CP437 que falla si un caracter no se puede representar.</summary>
    public static Encoding Cp437Strict { get; } =
        Encoding.GetEncoding(437, EncoderFallback.ExceptionFallback, DecoderFallback.ReplacementFallback);

    /// <summary>MacRoman (nombres de fichero de Mac clasico); lo no representable pasa a '_'.</summary>
    public static Encoding MacRoman { get; } =
        Encoding.GetEncoding(10000, new EncoderReplacementFallback("_"), new DecoderReplacementFallback("_"));

    private static bool Register()
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        return true;
    }

    /// <summary>Asegura el registro del proveedor (para quien use Encoding.GetEncoding directamente).</summary>
    public static bool EnsureRegistered() => Registered;
}
