buildscript {
    repositories {
        mavenLocal()
        jcenter()
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
        classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version"
    }
}

plugins {
    id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version"
    id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version"
    id "org.jetbrains.dokka" version "$dokka_version"
}

repositories {
    mavenLocal()
    jcenter()
    mavenCentral()
}

kotlin {
    jvm()
    js()

    sourceSets {
        commonMain {
            dependencies {
                implementation kotlin('stdlib')

                project.parent.subprojects.forEach {
                    if (it != project) {
                        api it
                    }
                }
            }
        }
    }
}

private Closure includeSourcesInDokka(String... approximateNames) {
    return {
        parent.subprojects.forEach {
            if (it != project) {
                File srcDir = new File(it.projectDir.absolutePath, "src")
                if (srcDir.exists() && srcDir.isDirectory()) {
                    srcDir.eachFile { file ->
                        if (approximateNames.any { file.name.contains(it) } && file.isDirectory()) {
                            String pathToSrc = file.absolutePath
                            sourceRoot {
                                path = pathToSrc
                            }
                        }
                    }
                }
            }
        }
    }
}

String dokkaFolder = "$projectDir/dokka"

dokka {
    (new File(dokkaFolder)).deleteDir()

    outputFormat = 'html'
    outputDirectory = dokkaFolder

    multiplatform {
        global {
            skipDeprecated = true

            sourceLink {
                path = "./"
                url = "https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/"
                lineSuffix = "#L"
            }
        }

        common(includeSourcesInDokka("commonMain"))
        js(includeSourcesInDokka("jsMain"/*, "commonMain"*/))
        jvm(includeSourcesInDokka("jvmMain"/*, "commonMain"*/))
    }
}
