local table = require "table"

description = [[
    Take the Windows major and minor version numbers and the build
    then return the long Windows Name
    
    Reference: http://gaijin.at/en/lstwinver.php
]]

os_version = {
    ["4.0.950"] = "Windows 95 OEM Service Release 1 (95A)",
    ["4.0.1111"] = "Windows 95 OEM Servce Release 2 (95B)",
    ["4.3.1212-1214"] = "Windows 95 OEM Service Release 2.1",
    ["4.3.1214"] = "Windows 95 OEM Service Release 2.5 C",
    ["4.10.1998"] = "Windows 98",
    ["4.10.2222"] = "Windows 98 Second Edition (SE)",
    ["4.90.2476"] = "Windows Millenium Beta",
    ["4.90.3000"] = "Windows Millenium",  
    ["3.10.528"] = "Windows NT 3.1",  
    ["3.50.807"] = "Windows NT 3.5",  
    ["3.51.1057"] = "Windows NT 3.51",  
    ["4.0.1381"] = "Windows NT 4.00",  
    ["5.0.1515"] = "Windows NT 5.00 (Beta 2)",  
    ["5.0.2031"] = "Windows 2000 (Beta 3)",  
    ["5.0.2128"] = "Windows 2000 (Beta 3 RC2)",  
    ["5.0.2183"] = "Windows 2000 (Beta 3)",  
    ["5.00.2195"] = "Windows 2000",  
    ["2250"] = "Whistler Server Preview",  
    ["2257"] = "Whistler Server alpha",  
    ["2267"] = "Whistler Server interim release",  
    ["2410"] = "Whistler Server interim release",  
    ["5.1.2505"] = "Windows XP (RC 1)",  
    ["5.1.2600"] = "Windows XP",  
    ["5.1.2600.1105-1106"] = "Windows XP, Service Pack 1",  
    ["5.1.2600.2180"] = "Windows XP, Service Pack 2",  
    ["5.1.2600"] = "Windows XP, Service Pack 3",  
    ["5.2.3541"] = "Windows .NET Server iterim",  
    ["5.2.3590"] = "Windows .NET Server Beta 3",  
    ["5.2.3660"] = "Windows .NET Server Release Candidate 1 (RC 1)",  
    ["5.2.3718"] = "Windows .NET Server 2003 RC2",  
    ["5.2.3763"] = "Windows Server 2003 (Beta?)",
    ["5.2.3790"] = "Windows Server 2003",
    ["5.2.3790.1180"] = "Windows Server 2003, Service Pack 1",
    ["5.2.3790.1218"] = "Windows Server 2003",
    ["5.2.3790"] = "Windows Home Server",
    ["6.0.5048"] = "Windows Longhorn",
    ["6.0.5112"] = "Windows Vista, Beta 1",
    ["6.0.5219"] = "Windows Vista, Community Technology Preview (CTP)",
    ["6.0.5259"] = "Windows Vista, TAP Preview",
    ["6.0.5270"] = "Windows Vista, CTP (Dezember)",
    ["6.0.5308"] = "Windows Vista, CTP (Februar)",
    ["6.0.5342"] = "Windows Vista, CTP (Refresh)",
    ["6.0.5365"] = "Windows Vista, April EWD",
    ["6.0.5381"] = "Windows Vista, Beta 2 Preview",
    ["6.0.5384"] = "Windows Vista, Beta 2",
    ["6.0.5456"] = "Windows Vista, Pre-RC1",
    ["6.0.5472"] = "Windows Vista, Pre-RC1, Build 5472",
    ["6.0.5536"] = "Windows Vista, Pre-RC1, Build 5536",
    ["6.0.5600.16384"] = "Windows Vista, RC1",
    ["6.0.5700"] = "Windows Vista, Pre-RC2",
    ["6.0.5728"] = "Windows Vista, Pre-RC2, Build 5728",
    ["6.0.5744.16384"] = "Windows Vista, RC2",
    ["6.0.5808"] = "Windows Vista, Pre-RTM, Build 5808",
    ["6.0.5824"] = "Windows Vista, Pre-RTM, Build 5824",
    ["6.0.5840"] = "Windows Vista, Pre-RTM, Build 5840",
    ["6.0.6000.16386"] = "Windows Vista, RTM (Release to Manufacturing)",
    ["6.0.6000"] = "Windows Vista",
    ["6.0.6002"] = "Windows Vista, Service Pack 2",
    ["6.0.6001"] = "Windows Server 2008",
    ["6.1.7600.16385"] = "Windows 7, RTM (Release to Manufacturing)",
    ["6.1.7600.16385"] = "Windows Server 2008 R2, RTM (Release to Manufacturing)",
}

---
-- @args major version 
-- @args minor version
-- @args build number

function get_windows_name(major, minor, build)
    if nil == major or nil == minor or nil == build then
        print "Need to input all major, minor and build version"
        return nil
    end

    key = table.concat({major, minor, build}, ".")
    return os_version[key] 
end    

v = get_windows_name("5","1","2600")
print (v)

v = get_windows_name("6","1","7600.16385")
print (v)

v = get_windows_name("5","1","2600.1105-1106")
print (v)
