#!/usr/bin/python3

# Copyright (c) 2018, NVIDIA CORPORATION.  All rights reserved.
#
# NVIDIA CORPORATION and its licensors retain all intellectual property
# and proprietary rights in and to this software, related documentation
# and any modifications thereto.  Any use, reproduction, disclosure or
# distribution of this software and related documentation without an express
# license agreement from NVIDIA CORPORATION is strictly prohibited.

import importlib
import sys
import os

#
# Platform base class
#
class DGX_Platform:

    def __init__(self):
        pass

    def get_raid_configurator(self, script_name):
        raise NotImplementedError("Can't implement abstract method")

#
# DGX Station
#
class DGX_Station(DGX_Platform):
    def __init__(self):
        DGX_Platform.__init__(self)

    def get_raid_configurator(self, script_name):
        raid_module = importlib.import_module("md_raid_configurator")
        configurator = raid_module.MDRaidConfigurator(script_name)
        return configurator

#
# DGX-1/1V Server
#
class DGX1_Server(DGX_Platform):
    def __init__(self):
        DGX_Platform.__init__(self)
        self.raid_name = "sdb"
        self.raid_module = importlib.import_module("megaraid_raid_configurator")

    def get_raid_configurator(self, script_name):
        configurator = self.raid_module.MegaRaidConfigurator(script_name)
        return configurator

class DGX_Explorer(DGX1_Server):
    def __init__(self):
        DGX_Platform.__init__(self)
        self.raid_module = importlib.import_module("exp_md_raid_configurator")

    def get_raid_configurator(self, script_name):
        configurator = self.raid_module.ExpMDRaidConfigurator(script_name)
        return configurator

class DCS_Server(DGX_Platform):
    def __init__(self):
        DGX_Platform.__init__(self)
        self.raid_module = importlib.import_module("dcs_raid_configurator")

    def get_raid_configurator(self, script_name):
        configurator = self.raid_module.DCSMDRaidConfigurator(script_name)
        return configurator

class DGX_A100(DGX_Platform):
    def __init__(self):
        DGX_Platform.__init__(self)
        self.raid_module = importlib.import_module("dgx_a100_raid_configurator")

    def get_raid_configurator(self, script_name):
        configurator = self.raid_module.DGXA100MDRaidConfigurator(script_name)
        return configurator

#
# DGX Station A100
#
class DGX_Station2(DGX_Platform):
    def __init__(self):
        DGX_Platform.__init__(self)

    def get_raid_configurator(self, script_name):
        raid_module = importlib.import_module("dgx_station2_raid_configurator")
        configurator = raid_module.DGXStation2MDRaidConfigurator(script_name)
        return configurator
