import os
import ymp
from ymp.config import icfg
icfg.init()
from ymp.stage import Stage
from ymp.env import Env

stage = Stage.get_registry()
env = Env.get_registry()

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

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

wildcard_constraints:
    _YMP_PRJ = "({})".format("|".join(icfg.datasets)),
    _YMP_DIR = "(\.[^./]+)*?",
    _YMP_VRT = "(\.ref_({})|\.by_({})|)*".format(refname, "[^./]+"),
    _YMP_ASM = "(\.(sp|trinity)|\.assemble_megahit|)",
    dir      = "[^/]+?",
    dir1     = "[^/]+",
    dir2     = "[^/]+",
    file     = "[^/]+",

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

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

    SRR = "[EDS]RR[0-9]+",
    project = "({})".format("|".join(icfg.datasets)),
    pairname = "({})".format("|".join(icfg.pairnames)),
    sample   = "(ALL|{})".format("|".join(icfg.allruns)),
    reference = refname,
    refname = refname,
    assembler = "(mh|mhc|sp|trinity|ref_{})".format(refname),
    mapper = "(bt2|bbm|map_bbmap|map_bowtie2)",
    genefind = "(blast)",

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

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


for snakefile in icfg.snakefiles:
    include: snakefile
