import upload.Bintray

// 部分源码来自 kotlinx.coroutines
// Source code from kotlinx.coroutines

task ensureBintrayAvailable() {
    doLast {
        if (!Bintray.isBintrayAvailable(project)) {
            throw new IllegalStateException("bintray isn't available. ")
        }
    }
}

if (!Bintray.isBintrayAvailable(project)) {
    println("bintray isn't available. NO PUBLICATIONS WILL BE SET")
    return
}

def miraiGitHubUrl = "https://github.com/mamoe/mirai"

bintray {
    user = Bintray.getUser(project)
    key = Bintray.getKey(project)

    pkg {
        repo = 'mirai'
        name = "mirai-core"
        licenses = ['AGPL']
        vcsUrl = miraiGitHubUrl
        websiteUrl = miraiGitHubUrl
        githubRepo = miraiGitHubUrl
        issueTrackerUrl = "$miraiGitHubUrl/issues"
       /* version {
            name = project.version
        }*/
    }
}

afterEvaluate {
    project.publishing.publications.forEach { publication ->
        publication.pom.withXml {
            def root = asNode()
            //root.appendNode('groupId', project.group)
            //root.appendNode('artifactId', project.name)
            //root.appendNode('version', project.version)
            root.appendNode('name', project.name)
            root.appendNode('description', project.description)
            root.appendNode('url', miraiGitHubUrl)
            root.children().last() + {
                licenses {
                    license {
                        name "AGPL-V3"
                        url "https://www.gnu.org/licenses/agpl-3.0.txt"
                        distribution "repo"
                    }
                }
                developers {
                    developer {
                        id "mamoe"
                        name "Mamoe Technologies"
                        email "support@mamoe.net"
                    }
                }
                scm {
                    url miraiGitHubUrl
                }
            }
        }
    }
}

bintrayUpload.doFirst {
    publications = project.publishing.publications
}

bintrayUpload.dependsOn {
    def list = new LinkedList<Task>()
    list.add(tasks.getByName("build"))

    list.addAll(tasks.findAll { task -> task.name.contains('Jar') })
    list.addAll(tasks.findAll { task -> task.name.startsWith('generateMetadataFileFor') })
    list.addAll(tasks.findAll { task -> task.name.startsWith('generatePomFileFor') })

    list
}

try {

// empty xxx-javadoc.jar
    task javadocJar(type: Jar) {
        archiveClassifier = 'javadoc'
    }

} catch (Exception ignored) {

}
publishing {
    publications.all {
        // add empty javadocs (no need for MPP root publication which publishes only pom file)
        if (it.name != 'kotlinMultiplatform') {
            it.artifact(javadocJar)
        }

        // Rename MPP artifacts for backward compatibility
        def type = it.name
        switch (type) {
            case 'kotlinMultiplatform':
                it.artifactId = "$project.name-native"
                break
            case 'metadata':
                it.artifactId = "$project.name-common"
                break
            case 'jvm':
                it.artifactId = "$project.name"
                break
            case 'js':
            case 'native':
                it.artifactId = "$project.name-$type"
                break
        }

        // disable metadata everywhere, but in native modules
        if (type == 'maven' || type == 'metadata' || type == 'jvm' || type == 'js') {
            moduleDescriptorGenerator = null
        }
    }
}

// bintrayUpload.dependsOn publishToMavenLocal