import groovy.lang.*

/*
 * Copyright 2016-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
 */

val buildDocsDir = "$buildDir/docs"
val jekyllDockerImage = "jekyll/jekyll:${version("jekyll")}"

val copyDocs by tasks.registering(Copy::class) {
    val dokkaTasks = rootProject.getTasksByName("dokka", true)

    from(dokkaTasks.map { "${it.project.buildDir}/dokka" }) {
        include("**/*.md")
        include("**/package-list")
    }
    from("docs")
    into(buildDocsDir)
    filter { it.replace("/index.md\"", "/index.html\"") }

    dependsOn(dokkaTasks)
}

val copyExampleFrontendJs by tasks.registering(Copy::class) {
    val srcBuildDir = project(":example-frontend-js").buildDir
    from("$srcBuildDir/dist")
    into("$buildDocsDir/example-frontend-js")

    dependsOn(":example-frontend-js:browserDistribution")
}

tasks.register<Exec>("site") {
    description = "Generate github pages"

    inputs.files(fileTree(buildDocsDir))
    outputs.dir("$buildDir/dist")
    workingDir = file(buildDocsDir)

    commandLine(
        "docker", "run", "--rm", "--volume=$buildDir:/srv/jekyll",
        "-t", jekyllDockerImage,
        "/bin/bash", "-c", "cd docs; jekyll build"
    )

    dependsOn(copyDocs)
    dependsOn(copyExampleFrontendJs)
}

// A useful task for local debugging -- serves a site locally
tasks.register<Exec>("serve") {
    commandLine(
        "docker", "run", "--rm", "--volume=$buildDir:/srv/jekyll",
        "-p", "8080:8080",
        "-t", jekyllDockerImage,
        "/bin/bash", "-c", "cd docs; jekyll serve --host 0.0.0.0 --port 8080"
    )

    dependsOn(copyDocs)
    dependsOn(copyExampleFrontendJs)
}

tasks.register<Delete>("clean") {
    delete(buildDir)
}

