import os

import ymp
from ymp.env import Env
from ymp.stage import Stage

icfg = ymp.get_config()
icfg.activate()

# make sure rules are executed in bash (not sh, dash or worse)
shell.executable(icfg.shell)

refname = str("({})".format("|".join(icfg.ref)))
pipename = str("({})".format("|".join(icfg.pipelines)))

wildcard_constraints:
    _YMP_DIR = r"([^/]+\.|)",
    dir      = r"[^/]+?",
    dir1     = r"[^/]+",
    dir2     = r"[^/]+",
    file     = r"[^/]+",

    nodots   = r"[^/.]+",
    query    = r"[^/.]+",
    gene     = r"[^/.]+",

    fracid   = r"[0-9][0-9]",
    coverage = r"[0-9]+",
    evalue   = r"[0-9]+",
    length   = r"[1-9][0-9]*",

    SRR = r"[EDS]RR[0-9]+",
    reference = refname,
    refname = refname,
    pipename = pipename,
    assembler = r"(mh|mhc|sp|trinity|ref_{})".format(refname),
    mapper = r"(map_bbmap|map_bowtie2)",
    genefind = r"(blast)",

    fasta = r"(fasta|fna|fa)",
    fastp = r"(fastp|faa)",
    fagz  = r"(fasta|fna|fa)(|.gz)",
    fqgz  = r"(fq)(|.gz)",

    by = r"(\.by_[^./]*|)",
    REF = r"(\.ref_[^./]*|)",
    target = r"[^/.]+",
    source = r"[^/.]+"

with Stage.new_registry() as stage, Env.new_registry() as env:
    for snakefile in icfg.snakefiles:
        include: snakefile

