""" Utility module to determine the OS Python running on

    --------------------------------------------------------------------------
    File:         utilsOsType.py

    Overview:       Python module to supply functions and an enumeration to
                    help determine the platform type, bit size and OS currently
                    being used.
    --------------------------------------------------------------------------

"""

# Python modules:
import sys      # Provide system information

# Third party modules:

# In-house modules:

# Instantiations:

# Enumerations:
#-----------------------------------------------------------------------------
# Details:  Class to implement a 'C' style enumeration type.
# Gotchas:  None.
# Authors:  Illya Rudkin 28/11/2013.
# Changes:  None.
#--
if sys.version_info.major >= 3:
    from enum import Enum

    class EnumOsType(Enum):
        Unknown = 0
        Darwin = 1
        FreeBSD = 2
        Linux = 3
        NetBSD = 4
        Windows = 5
        kFreeBSD = 6
else:
    class EnumOsType(object):
        values = ["Unknown",
                  "Darwin",
                  "FreeBSD",
                  "Linux",
                  "NetBSD",
                  "Windows",
                  "kFreeBSD"]

        class __metaclass__(type):
            #++----------------------------------------------------------------
            # Details:  Fn acts as an enumeration.
            # Args:     vName - (R) Enumeration to match.
            # Returns:  Int - Matching enumeration/index.
            # Throws:   None.
            #--

            def __getattr__(cls, vName):
                return cls.values.index(vName)

#++---------------------------------------------------------------------------
# Details:  Reverse fast lookup of the values list.
# Args:     vI - (R) Index / enumeration.
# Returns:  Str - text description matching enumeration.
# Throws:   None.
#--
            def name_of(cls, vI):
                return EnumOsType.values[vI]

#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------

#++---------------------------------------------------------------------------
# Details:  Determine what operating system is currently running on.
# Args:     None.
# Returns:  EnumOsType - The OS type being used ATM.
# Throws:   None.
#--


def determine_os_type():
    eOSType = EnumOsType.Unknown

    strOS = sys.platform
    if strOS == "darwin":
        eOSType = EnumOsType.Darwin
    elif strOS.startswith("freebsd"):
        eOSType = EnumOsType.FreeBSD
    elif strOS.startswith("linux"):
        eOSType = EnumOsType.Linux
    elif strOS.startswith("netbsd"):
        eOSType = EnumOsType.NetBSD
    elif strOS == "win32":
        eOSType = EnumOsType.Windows
    elif strOS.startswith("gnukfreebsd"):
        eOSType = EnumOsType.kFreeBSD

    return eOSType
