def checkBranchConditions(parameter="default") {
  switch(parameter) {
    case "default":
      switch(env.BRANCH_NAME) {
        case "master":
        case ~/release.*$/:
        case ~/hotfix.*$/:
        case "develop":
          return true
        default:
          return false
      }
    case "yes":
      return true
    case "no":
      return false
    default:
      return false
  }
}

def checkBranchConditionsV2(version, parameter="default") {
  switch(parameter) {
    case "default":
      switch(env.BRANCH_NAME) {
        case "master":
          return true
        case ~/release.*$/:
          if (version.contains("-RC")) {
            return true
          }
          else { return false }
        case "develop":
          if (version.contains("-SNAPSHOT")) {
            return true
          }
          else { return false }
        default:
          return false
      }
    case "yes":
      return true
    case "no":
      return false
    default:
      return false
  }
}

def setScalaPipelineParams(octopusProject, packageId, version, triggerDeploy, failIfReleaseExists) {
  // uses common environment variables to set parameter map for dockerPipeline method

  def params = [:]
  // Jenkins build parameters
  params.failIfReleaseExists = failIfReleaseExists
  params.triggerDeploy = triggerDeploy

  // Common variables to parameters
  params.octopusChannel = env.OCTOPUS_CHANNEL
  params.deployEnv      = env.DEPLOY_ENV

  // Parameters for octopus deploy and ECR
  params.octopusProject        = octopusProject
  params.packageId             = packageId
  params.packageVersion        = version
  params.octopusReleaseVersion = octopus.getVersionV3(env.BRANCH_NAME,version)

  return params
}

// Scala pipeline only includes creating a release, pushing build information and triggering a deploy
def scalaPipeline(params) {
  if (checkBranchConditionsV2(params.packageVersion, params.triggerDeploy)) {
    stage('Push build information') {
      octopus.createPackageBuildInformation(params.packageId, params.packageVersion)
    }
    stage('Create a release in octopus') {
      if (params.failIfReleaseExists || !octopus.releaseExists(params.octopusProject, params.octopusReleaseVersion)) {
        echo octopus.createReleaseV2(params.octopusProject, params.octopusReleaseVersion, params.packageVersion, params.octopusChannel)
      } else {
        echo "Step skipped due to conditions."
      }
    }
    stage('Deploy release in octopus') {
      if (params.deployEnv != 'skip_deployment') {
        echo octopus.deployRelease(params.octopusProject, params.deployEnv, params.octopusReleaseVersion, params.octopusChannel)
      } else {
        echo "Step skipped due to conditions."
      }
    }
  } else {
    echo "Deployment has been skipped"
  }
}
