#!/usr/bin/env snakemake

"""

.___  ___.  _______ .___________.    ___      .______    __
|   \/   | |   ____||           |   /   \     |   _  \  |  |
|  \  /  | |  |__   `---|  |----`  /  ^  \    |  |_)  | |  |
|  |\/|  | |   __|      |  |      /  /_\  \   |   ___/  |  |
|  |  |  | |  |____     |  |     /  _____  \  |  |      |  |
|__|  |__| |_______|    |__|    /__/     \__\ | _|      |__|

           Omics for All, Open Source for All

A pipeline to construct a genome catalogue from metagenomics data

"""

import sys
import metapi
import pandas as pd
from pprint import pprint

shell.executable("bash")

configfile: "config.yaml"

IS_PE = True \
    if config["params"]["reads_layout"] == "pe" \
       else False

RMHOST_DO = True \
    if config["params"]["rmhost"]["bwa"]["do"] or \
       config["params"]["rmhost"]["bowtie2"]["do"] \
       else False

TRIMMING_DO = True \
    if config["params"]["trimming"]["oas1"]["do"] or \
       config["params"]["trimming"]["sickle"]["do"] or \
       config["params"]["trimming"]["fastp"]["do"] \
       else False

ASSEMBLERS = []
if config["params"]["assembly"]["megahit"]["do"]:
    ASSEMBLERS += ["megahit"]
if config["params"]["assembly"]["idba_ud"]["do"]:
    ASSEMBLERS += ["idba_ud"]
if config["params"]["assembly"]["metaspades"]["do"]:
    ASSEMBLERS += ["metaspades"]
if config["params"]["assembly"]["spades"]["do"]:
    ASSEMBLERS += ["spades"]

BINNERS = []
if config["params"]["binning"]["metabat2"]["do"]:
    BINNERS += ["metabat2"]
if config["params"]["binning"]["maxbin2"]["do"]:
    BINNERS += ["maxbin2"]


if config["params"]["simulate"]["do"]:
    SAMPLES = metapi.parse_genomes(config)
else:
    SAMPLES = metapi.parse_samples(config)

READS_FORMAT = "sra" \
    if "sra" in SAMPLES.columns \
       else "fastq"


include: "rules/simulate.smk"
include: "rules/raw.smk"
include: "rules/trimming.smk"
include: "rules/rmhost.smk"
include: "rules/qcreport.smk"
include: "rules/assembly.smk"
include: "rules/coassembly.smk"
include: "rules/alignment.smk"
include: "rules/binning.smk"
include: "rules/cobinning.smk"
include: "rules/predict.smk"
include: "rules/checkm.smk"
include: "rules/dereplicate.smk"
include: "rules/classify.smk"
include: "rules/profiling.smk"
include: "rules/upload.smk"


rule all:
    input:
        rules.simulate_all.input,
        rules.raw_all.input,
        rules.trimming_all.input,
        rules.rmhost_all.input,
        rules.qcreport_all.input,
        rules.assembly_all.input,
        rules.coassembly_all.input,
        rules.alignment_all.input,
        rules.binning_all.input,
        rules.cobinning_all.input,
        rules.predict_all.input,
        rules.checkm_all.input,
        rules.dereplicate_all.input,
        rules.classify_all.input,
        rules.profiling_all.input,
        rules.upload_all.input
