SR
using FxResources.System.Security.Permissions;
using System.Resources;
namespace System
{
    internal static class SR
    {
        private static readonly bool s_usingResourceKeys = GetUsingResourceKeysSwitchValue();
        private static ResourceManager s_resourceManager;
        internal static ResourceManager ResourceManager => s_resourceManager ?? (s_resourceManager = new ResourceManager(typeof(FxResources.System.Security.Permissions.SR)));
        internal static string Argument_InvalidPermissionState => GetResourceString("Argument_InvalidPermissionState");
        internal static string Argument_NotAPermissionElement => GetResourceString("Argument_NotAPermissionElement");
        internal static string Argument_InvalidXMLBadVersion => GetResourceString("Argument_InvalidXMLBadVersion");
        internal static string Argument_WrongType => GetResourceString("Argument_WrongType");
        internal static string HostProtection_ProtectedResources => GetResourceString("HostProtection_ProtectedResources");
        internal static string HostProtection_DemandedResources => GetResourceString("HostProtection_DemandedResources");
        internal static string Security_PrincipalPermission => GetResourceString("Security_PrincipalPermission");
        internal static string PlatformNotSupported_CAS => GetResourceString("PlatformNotSupported_CAS");
        private static bool GetUsingResourceKeysSwitchValue()
        {
            if (!AppContext.TryGetSwitch("System.Resources.UseSystemResourceKeys", out bool isEnabled))
                return false;
            return isEnabled;
        }
        internal static bool UsingResourceKeys()
        {
            return s_usingResourceKeys;
        }
        private static string GetResourceString(string resourceKey)
        {
            if (!UsingResourceKeys()) {
                string result = null;
                try {
                    result = ResourceManager.GetString(resourceKey);
                    return result;
                } catch (MissingManifestResourceException) {
                    return result;
                }
            }
            return resourceKey;
        }
        private static string GetResourceString(string resourceKey, string defaultString)
        {
            string resourceString = GetResourceString(resourceKey);
            if (!(resourceKey == resourceString) && resourceString != null)
                return resourceString;
            return defaultString;
        }
        internal static string Format(string resourceFormat, object p1)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1);
            return string.Format(resourceFormat, p1);
        }
        internal static string Format(string resourceFormat, object p1, object p2)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1, p2);
            return string.Format(resourceFormat, p1, p2);
        }
        internal static string Format(string resourceFormat, object p1, object p2, object p3)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1, p2, p3);
            return string.Format(resourceFormat, p1, p2, p3);
        }
        internal static string Format(string resourceFormat, params object[] args)
        {
            if (args != null) {
                if (UsingResourceKeys())
                    return resourceFormat + ", " + string.Join(", ", args);
                return string.Format(resourceFormat, args);
            }
            return resourceFormat;
        }
        internal static string Format(IFormatProvider provider, string resourceFormat, object p1)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1);
            return string.Format(provider, resourceFormat, p1);
        }
        internal static string Format(IFormatProvider provider, string resourceFormat, object p1, object p2)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1, p2);
            return string.Format(provider, resourceFormat, p1, p2);
        }
        internal static string Format(IFormatProvider provider, string resourceFormat, object p1, object p2, object p3)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1, p2, p3);
            return string.Format(provider, resourceFormat, p1, p2, p3);
        }
        internal static string Format(IFormatProvider provider, string resourceFormat, params object[] args)
        {
            if (args != null) {
                if (UsingResourceKeys())
                    return resourceFormat + ", " + string.Join(", ", args);
                return string.Format(provider, resourceFormat, args);
            }
            return resourceFormat;
        }
    }
}