/*
 * -------------------------------------------------
 *  nf-core/neutronstar Nextflow config file
 * -------------------------------------------------
 * Default config options for all environments.
 * Cluster-specific config options should be saved
 * in the conf folder and imported under a profile
 * name here.
 */

// Global default params, used in configs
params {
    outdir = './results'
    supernova_container = 'nfcore/supernova:2.1.1'
    clusterOptions = false
    minsize = 1000
    full_output = false
    busco_folder = "$baseDir/data"
    test = false
    reads = false
    lanes = false
    indices = false
    maxreads = false
    bcfrac = false
    nopreflight = false
    no_accept_extreme_coverage = false
    genomesize = false
    project = false

    // Boilerplate options
    name = false
    multiqc_config = "$baseDir/assets/multiqc_config.yaml"
    email = false
    email_on_fail = false
    maxMultiqcEmailFileSize = 25.MB
    plaintext_email = false
    monochrome_logs = false
    help = false
    tracedir = "${params.outdir}/pipeline_info"
    custom_config_version = 'master'
    custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}"
    config_profile_description = false
    config_profile_contact = false
    config_profile_url = false
    hostnames = false
}

timeline {
  enabled = true
  file = "${params.tracedir}/execution_timeline.html"
}
report {
  enabled = true
  file = "${params.tracedir}/execution_report.html"
}
trace {
  enabled = true
  file = "${params.tracedir}/execution_trace.txt"
}
dag {
  enabled = true
  file = "${params.tracedir}/pipeline_dag.svg"
}

process.container = 'nfcore/neutronstar:1.0.0'

// Load base.config by default for all pipelines
includeConfig 'conf/base.config'

profiles {
    conda { process.conda = "$baseDir/environment.yml" }
    debug { process.beforeScript = 'echo $HOSTNAME' }
    docker {
        docker.enabled = true
        fixOwnership = true
        runOptions = "-u \$(id -u):\$(id -g)"
    }
    singularity { singularity.enabled = true }
    test { includeConfig 'conf/test.config' }

}

// Capture exit codes from upstream processes when piping
process.shell = ['/bin/bash', '-euo', 'pipefail']

manifest {
  name = 'nf-core/neutronstar'
  author = 'Remi-Andre Olsen (@remiolsen)'
  homePage = 'https://github.com/nf-core/neutronstar'
  description = 'De novo assembly pipeline for 10X linked-reads, used at the SciLifeLab National Genomics Infrastructure.'
  mainScript = 'main.nf'
  nextflowVersion = '>=19.04.0'
  version = '1.0.0'
}

// Function to ensure that resource requirements don't go beyond
// a maximum limit
def check_max(obj, type) {
  if (type == 'memory') {
    try {
      if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1)
        return params.max_memory as nextflow.util.MemoryUnit
      else
        return obj
    } catch (all) {
      println "   ### ERROR ###   Max memory '${params.max_memory}' is not valid! Using default value: $obj"
      return obj
    }
  } else if (type == 'time') {
    try {
      if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1)
        return params.max_time as nextflow.util.Duration
      else
        return obj
    } catch (all) {
      println "   ### ERROR ###   Max time '${params.max_time}' is not valid! Using default value: $obj"
      return obj
    }
  } else if (type == 'cpus') {
    try {
      return Math.min( obj, params.max_cpus as int )
    } catch (all) {
      println "   ### ERROR ###   Max cpus '${params.max_cpus}' is not valid! Using default value: $obj"
      return obj
    }
  }
}
