# do onstart/onexit things
SAMPLE_SCHEMAS = ['sample', 'assembly']
CONFIG_SCHEMAS = ['general', 'download', 'alignment_general', 'alignment_specific', 'scrna', 'trackhub']
include: "../../rules/configuration.smk"


# load all the relevant rules
include: f"{config['rule_dir']}/get_fastq.smk"
include: f"{config['rule_dir']}/trimming.smk"
include: f"{config['rule_dir']}/merge_replicates.smk"
include: f"{config['rule_dir']}/get_genome.smk"
include: f"{config['rule_dir']}/alignment.smk"
include: f"{config['rule_dir']}/gene_quantification.smk"
include: f"{config['rule_dir']}/qc.smk"
include: f"{config['rule_dir']}/qc_scRNA.smk"


# set the quality_control functions
QUALITY_CONTROL = [get_trimming_qc, get_scrna_qc]


rule seq2science:
    """
    Make a QC report and map
    """
    input:
        expand(([f"{{result_dir}}/{{quantifier}}/{CUSTOM_ASSEMBLIES[treps.loc[trep, 'assembly']]}-{trep}/run_info.json" for trep in treps.index] if config["quantifier"] == "kallistobus" else []) +
               ([f"{{result_dir}}/{{quantifier}}/{CUSTOM_ASSEMBLIES[treps.loc[trep, 'assembly']]}-{trep}/_tag_counts/run_report.yaml" for trep in treps.index] if config["quantifier"] == "citeseqcount" else []) +
               ([f"{{result_dir}}/scrna-preprocess/{{quantifier}}/raw/{CUSTOM_ASSEMBLIES[treps.loc[trep, 'assembly']]}-{trep}/export/R/raw_SCE.RDS" for trep in treps.index] if config.get("sc_preprocess",{}).get("export_sce_objects",{}) else []) +
               ([f"{{result_dir}}/scrna-preprocess/{{quantifier}}/sctk/{CUSTOM_ASSEMBLIES[treps.loc[trep, 'assembly']]}-{trep}/export/R/sctk_SCE.RDS" for trep in treps.index] if config.get("sc_preprocess",{}).get("run_sctk_qc",{}) else []) +
               (["{qc_dir}/multiqc_{assemblies}.html"] if config["create_qc_report"] else []),
               assemblies=ALL_ASSEMBLIES, **config)
