#!/usr/bin/python

import sys
import imp

PLATFORM_SPECIFIC_MODULE_NAME = "eeprom"
PLATFORM_SPECIFIC_CLASS_NAME = "board"

platform_eeprom = None
platform_eeprom_data = None

# Returns path to platform and hwsku
def get_path_to_platform_and_hwsku():
    platform_path = '/usr/share/sonic/platform'
    hwsku_path = '/usr/share/sonic/hwsku'
    return (platform_path, hwsku_path)

# Loads platform specific psuutil module from source
def load_platform_util(module_name, class_name):
    platform_util = None

    # Get path to platform and hwsku
    (platform_path, hwsku_path) = get_path_to_platform_and_hwsku()

    try:
        module_file = "/".join([platform_path, "plugins", module_name + ".py"])
        module = imp.load_source(module_name, module_file)
    except IOError, e:
        assert False, ("Failed to load platform module '%s': %s" % (module_name, str(e)))

    try:
        platform_util_class = getattr(module, class_name)
        # board class of eeprom requires 4 paramerters, need special treatment here.
        platform_util = platform_util_class('','','','')
    except AttributeError, e:
        assert False, ("Failed to instantiate '%s' class: %s" % (class_name, str(e)))

    return platform_util

def init_platform_eeprom():
    global platform_eeprom
    global platform_eeprom_data

    if platform_eeprom is None:
        platform_eeprom = load_platform_util(PLATFORM_SPECIFIC_MODULE_NAME, \
                                             PLATFORM_SPECIFIC_CLASS_NAME)
    if platform_eeprom_data is None:
        platform_eeprom_data = platform_eeprom.read_eeprom()

    return platform_eeprom_data

def main():
    e = init_platform_eeprom()
    c = platform_eeprom._TLV_CODE_PLATFORM_NAME
    if len(sys.argv) > 1:
        c = int(sys.argv[1], 0)
    v, t = platform_eeprom.get_tlv_field(e, c)
    if v:
        print(t[2])
    else:
        print("Unknown")

if __name__ == '__main__':
    main()