#!/usr/bin/env python3
r"""
Generate an inventory variable file containing a list of properties
fields from the YAML phosphor-dbus-interfaces repository.
"""
import json
import os
import sys

import yaml

lib_path = sys.path[0] + "/../lib"
sys.path.insert(0, lib_path)
from gen_print import *  # NOQA

# This list will be longer when more development codes are available.
inventory_items = ["fru", "core", "fan", "fan_wc", "gpu"]
print_var(inventory_items)
fru_inventory_file_path = "inventory.py"
print_var(fru_inventory_file_path)

# Properties inventory list
yaml_inventory_list = []

# Clone the phosphor-dbus-interfaces repository
cmd_buf = "git clone https://github.com/openbmc/phosphor-dbus-interfaces"
os.system(cmd_buf)

repo_subdir_path = "/phosphor-dbus-interfaces/xyz/openbmc_project/"
base_dir_path = os.getcwd() + repo_subdir_path

# yaml file paths for FRU
yaml_fru_list = [
    "Inventory/Item.interface.yaml",
    "Inventory/Decorator/Asset.interface.yaml",
    "Inventory/Decorator/Revision.interface.yaml",
    "Inventory/Decorator/Replaceable.interface.yaml",
    "Inventory/Decorator/Cacheable.interface.yaml",
    "State/Decorator/OperationalStatus.interface.yaml",
]

# yaml file paths for CORE.
yaml_core_list = [
    "Inventory/Item.interface.yaml",
    "State/Decorator/OperationalStatus.interface.yaml",
]

# yaml file paths for fan.
yaml_fan_list = [
    "Inventory/Item.interface.yaml",
    "Inventory/Decorator/MeetsMinimumShipLevel.interface.yaml",
    "State/Decorator/OperationalStatus.interface.yaml",
]

# yaml file paths for fan_wc (fans in water-cooled system).
yaml_fan_wc_list = [
    "Inventory/Item.interface.yaml",
    "Inventory/Decorator/MeetsMinimumShipLevel.interface.yaml",
]

# yaml file paths for GPU.
yaml_gpu_list = [
    "Inventory/Item.interface.yaml",
    "Inventory/Decorator/Replaceable.interface.yaml",
    "State/Decorator/OperationalStatus.interface.yaml",
]

# Append to inventory list
yaml_inventory_list.append(yaml_fru_list)
yaml_inventory_list.append(yaml_core_list)
yaml_inventory_list.append(yaml_fan_list)
yaml_inventory_list.append(yaml_fan_wc_list)
yaml_inventory_list.append(yaml_gpu_list)

print_var(yaml_inventory_list)

# Populate Inventory data
inventory_dict = {}

for inv_index in range(len(yaml_inventory_list)):
    print_var(inv_index)
    inventory_dict[str(inventory_items[inv_index])] = []
    for rel_yaml_file_path in yaml_inventory_list[inv_index]:
        yaml_file_path = base_dir_path + rel_yaml_file_path

        # Get the yaml dictionary data
        print_timen("Loading " + yaml_file_path)
        f = open(yaml_file_path)
        yaml_data = yaml.safe_load(f)
        f.close()
        for item in range(0, len(yaml_data["properties"])):
            tmp_data = yaml_data["properties"][item]["name"]
            inventory_dict[str(inventory_items[inv_index])].append(tmp_data)

# Pretty print json formatter
data = json.dumps(
    inventory_dict,
    indent=4,
    sort_keys=True,
    default=str,
    separators=(",", ":"),
)

# Check if there is mismatch in data vs expect list
if len(inventory_dict) != len(inventory_items):
    print_error("The generated list doesn't match Inventory List.\n")
    print(data)
    print_var(inventory_items)
    sys.exit()

# Write dictionary data to inventory file
print("\nGenerated Inventory item json format\n")
print(data)
out = open(fru_inventory_file_path, "w")
out.write("inventory_dict = ")
out.write(data)

out.close()
print("\nGenerated Inventory File: %s " % fru_inventory_file_path)
