/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Kotlin application project to get you started.
 * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
 * User Manual available at https://docs.gradle.org/8.0.2/userguide/building_java_projects.html
 */

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.github.fvarrui:javapackager:1.7.2'
    }
}

plugins {
    // Apply the org.jetbrains.kotlin.jvm Plugin to add support for Kotlin.
    id 'org.jetbrains.kotlin.jvm' version '1.8.0'

    // Apply the application plugin to add support for building a CLI application in Java.
    id 'application'

    id 'org.openjfx.javafxplugin' version '0.0.13'
    id 'distribution'
}

apply plugin: 'io.github.fvarrui.javapackager.plugin'

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use the Kotlin JUnit 5 integration.
    testImplementation 'org.jetbrains.kotlin:kotlin-test-junit5'

    // Use the JUnit 5 integration.
    testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.9.1'

    // This dependency is used by the application.
    implementation 'com.google.guava:guava:31.1-jre'

    // Coroutines core
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.0"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-javafx:1.7.0"

    // Archiver
    implementation "org.rauschig:jarchivelib:1.2.0"
}

application {
    // Define the main class for the application.
    mainClass = 'xyz.brysonsteck.ServerCraft.MainKt'
    applicationName = "ServerCraft"
}

distTar {
    compression = Compression.GZIP
}

jar {
    archiveFileName = 'ServerCraft.jar'

    manifest {
        attributes 'Main-Class': application.mainClass
    }

    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

task pack(type: io.github.fvarrui.javapackager.gradle.PackageTask, dependsOn: build) {
    mainClass = 'xyz.brysonsteck.ServerCraft.MainKt'
    bundleJre = true
    generateInstaller = true
    administratorRequired = false
    additionalResources = [ file('src/main/resources/xyz/brysonsteck/ServerCraft/') ]

    linuxConfig {
      pngFile = file('src/main/resources/icon.png')
    }

    macConfig {
      icnsFile = file('src/main/resources/icon.icns')
      volumeIcon = file('src/main/resources/icon.icns')
      backgroundImage = file('src/main/resources/dmg.png')
      codesignApp = false
      developerId = 'Bryson Steck'
      appId = 'xyz.brysonsteck.ServerCraft'
    }

    winConfig {
      icoFile = file('src/main/resources/icon.ico')
      setupMode = 'askTheUser'
      disableDirPage = false
      disableFinishedPage = false
      disableWelcomePage = false
    }
}

clean.doFirst {
  delete "${rootDir}/app/bin"
  delete "${rootDir}/build"
}

javafx {
    version = "20"
    modules = ['javafx.controls', 'javafx.fxml', 'javafx.graphics']
}

tasks.named('test') {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}
