/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Config file for defining DSL2 per module options and publishing paths
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Available keys to override module options:
        ext.args   = Additional arguments appended to command in module.
        ext.args2  = Second set of arguments appended to command in module (multi-tool modules).
        ext.args3  = Third set of arguments appended to command in module (multi-tool modules).
        ext.prefix = File name prefix for output files.
----------------------------------------------------------------------------------------
*/

process {
    // individual processes ------------------------------------------------------------
    withName: COMBINE_SCOREFILES {
        ext.args = "-v"
    }

    withName: PLINK2_VCF {
        ext.args = "--new-id-max-allele-len 100 missing"
    }

    withName: PLINK2_RELABELBIM {
        ext.args = "--new-id-max-allele-len 100 missing --allow-extra-chr"
    }

    withName: PLINK2_RELABELPVAR {
        ext.args = "--new-id-max-allele-len 100 missing --allow-extra-chr"
    }

    withName: PLINK2_SCORE {
        ext.args = "--allow-extra-chr"
        ext.args2 = "zs"  // compress .sscore with zstd by default
    }

    // container configuration
    withLabel: pgscatalog_utils {
        ext.conda = "$projectDir/environments/pgscatalog_utils/environment.yml"
        ext.docker = 'ghcr.io/pgscatalog/pygscatalog'
        ext.singularity = 'oras://ghcr.io/pgscatalog/pygscatalog'
        ext.docker_version = ':pgscatalog-utils-2.0.0'
        ext.singularity_version = ':pgscatalog-utils-2.0.0-singularity'
    }

    withLabel: plink2 {
        ext.conda = "$projectDir/environments/plink2/environment.yml"
        ext.docker = 'ghcr.io/pgscatalog/plink2'
        ext.singularity = 'oras://ghcr.io/pgscatalog/plink2'
        ext.docker_version = ':2.00a5.10'
        ext.singularity_version = ':2.00a5.10-singularity'
    }

    withLabel: zstd {
        ext.conda = "$projectDir/environments/zstd/environment.yml"
        ext.singularity = 'oras://ghcr.io/pgscatalog/zstd'
        ext.singularity_version = ':2-beta-singularity'
        ext.docker = 'ghcr.io/pgscatalog/zstd'
        ext.docker_version = ':2-beta'
    }

    withLabel: report {
        ext.conda = "$projectDir/environments/report/environment.yml"
        ext.singularity = 'oras://ghcr.io/pgscatalog/report'
        ext.singularity_version = ':2-beta-singularity'
        ext.docker = 'ghcr.io/pgscatalog/report'
        ext.docker_version = ':2-beta'
    }

    withLabel: pyyaml {
        ext.conda = "$projectDir/environments/pyyaml/environment.yml"
        ext.singularity = 'oras://ghcr.io/pgscatalog/pyyaml'
        ext.singularity_version = ':6.0-singularity'
        ext.docker = 'ghcr.io/pgscatalog/pyyaml'
        ext.docker_version = ':6.0'
    }

    withLabel: fraposa {
        ext.conda = "$projectDir/environments/fraposa/environment.yml"
        ext.singularity = 'oras://ghcr.io/pgscatalog/fraposa_pgsc'
        ext.singularity_version = ':v1.0.2-singularity'
        ext.docker = 'ghcr.io/pgscatalog/fraposa_pgsc'
        ext.docker_version = ':v1.0.2'
    }

    // output configuration
    withLabel: copy_genomes {
        publishDir = [
            path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" },
            mode: 'copy',
            saveAs: { filename -> filename.equals('versions.yml') ? null : filename }
        ]
    }

    withName: 'PGSCATALOG_GET|SCORE_REPORT' {
        publishDir = [
            // first element of tag -> sampleset
            path: { "${params.outdir}/${task.tag.tokenize(' ')[0]}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" },
            mode: 'copy'
        ]
    }

    withName: 'MATCH_VARIANTS|MATCH_COMBINE' {
        publishDir = [
            // first element of tag -> sampleset
            path: { "${params.outdir}/${task.tag.tokenize(' ')[0]}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" },
            pattern: '*.{gz,csv,yml}',
            mode: 'copy'
        ]
    }

    withName: 'DUMPSOFTWAREVERSIONS' {
        publishDir = [
            path: { "${params.outdir}/pipeline_info" },
            mode: params.publish_dir_mode,
            pattern: '*_versions.yml'
        ]
    }
}
