import json
from jsonschema import validate
import snakemake.utils
import sys, getopt
import shutil
import filecmp
from pathlib import Path
import os

args = sys.argv

configfilename="config/config.json"

i=0
for arg in args:
    if arg=="--configfile" or arg=="--configfiles": # This is strange
        configfilename = args[i+1]
        break
    i+=1

configfile: 
    configfilename

snakemake.utils.validate(config, 'schemas/config.schema.json')

include: "rules/docker_images.smk"

singularity:
    docker_image("benchmark")

def get_active_rules(wildcards):
    rules = []
    for key, val in config["benchmark_setup"]["evaluation"].items():
        # Check if boolean or list or object wirh nonempty ids field. 
        if isinstance(val, OrderedDict) and val["ids"] != []:
            rules.append("results/output/"+key+"/"+key+".done")
        if isinstance(val, bool) and val is True:
            rules.append("results/output/"+key+"/"+key+".done")
        if isinstance(val, list) and val != []:
            rules.append("results/output/"+key+"/"+key+".done")
    return rules

rule all:
    input: get_active_rules

include: "rules/validate.smk"
include: "rules/pattern_strings.smk"
include: "rules/algorithm_strings.smk"
include: "rules/helper_functions.smk"
include: "rules/algorithm_shell_commands.smk"
include: "rules/algorithm_summary_shell_command.smk"
include: "rules/sample_adjmat.smk"
include: "rules/sample_parameters.smk"
include: "rules/sample_data.smk"
include: "rules/algorithm_rules.smk"
include: "rules/evaluation.smk"