#!/usr/bin/env python

from argparse import ArgumentParser
from core.sysctl import Sysctl
from core.postfix import Postfix
from core.report import generateHtmlReport
from core.config import AUDIT_SYSTEM, AUDIT_APPLICATION, generateConfig, parsingConfigFile
from core.dispatcher import Dispatcher


def checkArguments():
    args = ArgumentParser(description="Check Gitlab repositories")
    args.add_argument('-a', '--audit', help="Kind of audit", choices=['system', 'application'])
    args.add_argument('-c', '--config', help="Config file")
    return args.parse_args()


def main():
    args = checkArguments()
    
    # If audit is not specified
    if args.audit is None:
        print("Please, you must specify the audit type")
        exit(1)
    
    # If config file is specified
    configs = generateConfig()
    if args.config is not None:
        parsingConfigFile(args.config, configs)

    # Report
    report = dict()
    report['system'] = dict() 

    # Create our dispatcher
    dispatcher = Dispatcher()

    print(configs)

    if args.audit == "system":
        for audit in AUDIT_SYSTEM:
            if audit not in configs["system"]["exclude_plugins"]:
                report["system"][audit] = dispatcher.runPlugin(audit, configs["system"][audit])

    if args.audit == "application":
        pass

    generateHtmlReport(report) 

@Dispatcher.register_plugins
def sysctl(*args) -> dict:
    sysctl = Sysctl(args[1])
    sysctl.runAudit()
    return sysctl.getReports()

@Dispatcher.register_plugins
def postfix(*args) -> dict:
    arguments = args[1]
    postfix = Postfix()
    postfix.runAudit()
    return postfix.getReports()

if __name__ == "__main__":
    main()