﻿using DSInternals.Common.Interop;
using System.Management.Automation;

namespace DSInternals.PowerShell
{
    internal static class Win32ErrorCodeExtensions
    {
        static internal ErrorCategory ToPSCategory(this Win32ErrorCode code)
        {
            ErrorCategory category;
            switch (code)
            {
                case Win32ErrorCode.ACCESS_DENIED:
                    category = ErrorCategory.PermissionDenied;
                    break;

                case Win32ErrorCode.LOGON_FAILURE:
                    category = ErrorCategory.AuthenticationError;
                    break;

                case Win32ErrorCode.BAD_NETPATH:
                case Win32ErrorCode.RPC_S_SERVER_UNAVAILABLE:
                    category = ErrorCategory.ConnectionError;
                    break;

                case Win32ErrorCode.NOT_FOUND:
                case Win32ErrorCode.NO_SUCH_USER:
                case Win32ErrorCode.NO_SUCH_DOMAIN:
                case Win32ErrorCode.NONE_MAPPED:
                    category = ErrorCategory.ObjectNotFound;
                    break;

                case Win32ErrorCode.PASSWORD_RESTRICTION:
                    category = ErrorCategory.SecurityError;
                    break;

                case Win32ErrorCode.MORE_DATA:
                    category = ErrorCategory.LimitsExceeded;
                    break;

                default:
                    category = ErrorCategory.NotSpecified;
                    break;
            }
            return category;
        }
    }
}