/*
 * Copyright 2003-2023 The IdeaVim authors
 *
 * Use of this source code is governed by an MIT-style
 * license that can be found in the LICENSE.txt file or at
 * https://opensource.org/licenses/MIT.
 */

plugins {
  java
  kotlin("jvm")
  application
}

// group 'org.jetbrains.ideavim'
// version 'SNAPSHOT'

repositories {
  mavenCentral()
}

dependencies {
  compileOnly("org.jetbrains.kotlin:kotlin-stdlib:2.1.10")

  implementation("io.ktor:ktor-client-core:3.1.1")
  implementation("io.ktor:ktor-client-cio:3.1.1")
  implementation("io.ktor:ktor-client-content-negotiation:3.1.1")
  implementation("io.ktor:ktor-serialization-kotlinx-json:3.1.1")
  implementation("io.ktor:ktor-client-auth:3.1.1")
  implementation("org.eclipse.jgit:org.eclipse.jgit:6.6.0.202305301015-r")

  // This is needed for jgit to connect to ssh
  implementation("org.eclipse.jgit:org.eclipse.jgit.ssh.apache:7.1.0.202411261347-r")
  implementation("com.vdurmont:semver4j:3.1.0")
}

val releaseType: String? by project

tasks {
  compileKotlin {
    kotlinOptions {
      freeCompilerArgs = listOf("-Xjvm-default=all-compatibility")
    }
  }
}

tasks.register("generateIdeaVimConfigurations", JavaExec::class) {
  group = "verification"
  description = "This job tracks if there are any new plugins in marketplace we don't know about"
  mainClass.set("scripts.MainKt")
  classpath = sourceSets["main"].runtimeClasspath
}

tasks.register("checkNewPluginDependencies", JavaExec::class) {
  group = "verification"
  description = "This job tracks if there are any new plugins in marketplace we don't know about"
  mainClass.set("scripts.CheckNewPluginDependenciesKt")
  classpath = sourceSets["main"].runtimeClasspath
}

tasks.register("calculateNewVersion", JavaExec::class) {
  group = "release"
  mainClass.set("scripts.release.CalculateNewVersionKt")
  classpath = sourceSets["main"].runtimeClasspath
  args = listOf("${rootProject.rootDir}", releaseType ?: "")
}

tasks.register("changelogUpdateUnreleased", JavaExec::class) {
  group = "release"
  mainClass.set("scripts.release.ChangelogUpdateUnreleasedKt")
  classpath = sourceSets["main"].runtimeClasspath
  args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}

tasks.register("commitChanges", JavaExec::class) {
  group = "release"
  mainClass.set("scripts.release.CommitChangesKt")
  classpath = sourceSets["main"].runtimeClasspath
  args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}

tasks.register("addReleaseTag", JavaExec::class) {
  group = "release"
  mainClass.set("scripts.release.AddReleaseTagKt")
  classpath = sourceSets["main"].runtimeClasspath
  args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}

tasks.register("selectBranch", JavaExec::class) {
  group = "release"
  mainClass.set("scripts.release.SelectBranchKt")
  classpath = sourceSets["main"].runtimeClasspath
  args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}

tasks.register("eapReleaseActions", JavaExec::class) {
  group = "release"
  mainClass.set("scripts.releaseEap.EapReleaseActionsKt")
  classpath = sourceSets["main"].runtimeClasspath
  args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}

tasks.register("calculateNewEapVersion", JavaExec::class) {
  group = "release"
  mainClass.set("scripts.release.CalculateNewEapVersionKt")
  classpath = sourceSets["main"].runtimeClasspath
  args = listOf("${rootProject.rootDir}")
}

tasks.register("calculateNewDevVersion", JavaExec::class) {
  group = "release"
  mainClass.set("scripts.release.CalculateNewDevVersionKt")
  classpath = sourceSets["main"].runtimeClasspath
  args = listOf("${rootProject.rootDir}")
}

tasks.register("setTeamCityBuildNumber", JavaExec::class) {
  group = "release"
  mainClass.set("scripts.release.SetTeamCityBuildNumberKt")
  classpath = sourceSets["main"].runtimeClasspath
  args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}