using System.Net;

namespace TINK.Repository.Exception
{
    public static class WebExceptionHelper
    {
        /// <summary> Gets if a exception is caused by an error connecting to copri (LAN or mobile data off/ not reachable, proxy, ...).</summary>
        /// <param name="exception">Expection to check.</param>
        /// <returns>True if exception if caused by an connection error. </returns>
        public static bool GetIsConnectFailureException(this System.Exception exception)
        {
#if !USCSHARP9
            if (!(exception is WebException webException))
#else
            if (exception is not WebException webException)
#endif
            {
                return false;
            }

            return webException.Status == WebExceptionStatus.ConnectFailure // Happens if WLAN and mobile data is off/ Router denies internet access/ ...
                || webException.Status == WebExceptionStatus.NameResolutionFailure // Happens sometimes when not WLAN and no mobil connection are available (bad connection in lift).
                || webException.Status == WebExceptionStatus.ReceiveFailure; // Happened when modile was connected to WLAN
        }

        /// <summary> Gets if a exception is caused by clicking too fast.</summary>
        /// <param name="exception">Expection to check.</param>
        /// <returns>True if exception if caused by a fast click sequence. </returns>
        public static bool GetIsForbiddenException(this System.Exception exception)
        {
#if !USCSHARP9
            if (!(exception is WebException webException))
#else
            if (exception is not WebException webException)
#endif
            {
                return false;
            }

#if !USCSHARP9
            if (!(webException?.Response is HttpWebResponse response))
#else
            if (webException?.Response is not HttpWebResponse response)
#endif
            {
                return false;
            }

            return webException.Status == WebExceptionStatus.ProtocolError
                && response.StatusCode == HttpStatusCode.Forbidden;
        }
    }
}