#!/usr/bin/env python

import ri_data

class Pkg():
    list = []

    @staticmethod
    def set_list ():
        list = ri_data.Group.get_install_pkgs()

class FsType():
    list = []

    @staticmethod
    def set_list ():
        for fs in ri_data.MountPoint.dict.values():
            FsType.list.append(fs.filesystem)

class FunctionDepending():
    list = []
    def __init__(self, pkg):
        self.package = pkg
        FunctionDepending.list.append(self)

    def check(self):
        return False

    def error(self):
        return {}

class FileSystem(FunctionDepending):
    list = []
    def __init__(self, fs_type, fs_pkg):
        self.filesystem_type = fs_type
        FunctionDepending.__init__(self, fs_pkg)

    def check(self):
        if self.filesystem_type in FsType.list and self.package not in Pkg.list:
            return False
        return True

    def error(self):
        mesg="format filesystem " + self.filesystem_type
        return {mesg:self.package}

class DHCP(FunctionDepending):
    def __init__(self):
        FunctionDepending.__init__(self, 'dhcpcd')

    def check(self):
        if ri_data.Network.configuration == 'dynamic' and 'dhcpcd' not in Pkg.list:
            return False
        return True

    def error(self):
        return {"dynamic configure network":"dhcpcd"}

class RAID(FunctionDepending):
    def __init__(self):
        FunctionDepending.__init__(self, 'mdadm')
            
    def check(self):
        if 'mdadm' not in Pkg.list and ri_data.Raid.dict:
            return False
        return True

    def error(self):
        return {"make raid":"mdadm"}

def check_function_depending():
    Pkg.set_list()
    FsType.set_list()
    func_dep_dict = {}

    FileSystem("xfs", "xfsprogs")
    FileSystem("jfs", "jfsutils")

    DHCP()
    RAID()

    for i in FunctionDepending.list:
        # if function depending package not in package list
        if not i.check():
            tmp = i.error()
            func_dep_dict.update(tmp)
    return func_dep_dict


