if (versions == null || versions.publish_version == null) {
  throw new IllegalStateException("Unable to reference publish_version!")
} else if (module_group == null || module_name == null) {
  throw new IllegalStateException("Must provide module_group and module_name!")
}

apply plugin: 'maven-publish'
apply plugin: 'signing'

task androidSourcesJar(type: Jar) {
  archiveClassifier.set('sources')
  if (project.plugins.findPlugin("com.android.library")) {
    // For Android libraries
    from android.sourceSets.main.java.srcDirs
    from android.sourceSets.main.kotlin.srcDirs
  } else {
    // For pure Kotlin libraries, in case you have them
    from sourceSets.main.java.srcDirs
    from sourceSets.main.kotlin.srcDirs
  }
}

artifacts {
  archives androidSourcesJar
}

group = module_group
version = versions.publish_version

// Default values
ext["signing.keyId"] = ''
ext["signing.password"] = ''
ext["signing.secretKeyRingFile"] = ''
ext["ossrhUsername"] = ''
ext["ossrhPassword"] = ''
ext["sonatypeStagingProfileId"] = ''

File secretPropsFile = project.rootProject.file('local.properties')
if (secretPropsFile.exists()) {
  Properties p = new Properties()
  new FileInputStream(secretPropsFile).withCloseable { is -> p.load(is) }
  p.each { name, value -> ext[name] = value }
} else {
  ext["signing.keyId"] = System.getenv('SIGNING_KEY_ID')
  ext["signing.password"] = System.getenv('SIGNING_PASSWORD')
  ext["signing.secretKeyRingFile"] = System.getenv('SIGNING_SECRET_KEY_RING_FILE')
  ext["ossrhUsername"] = System.getenv('OSSRH_USERNAME')
  ext["ossrhPassword"] = System.getenv('OSSRH_PASSWORD')
  ext["sonatypeStagingProfileId"] = System.getenv('SONATYPE_STAGING_PROFILE_ID')
}

publishing {
  publications {
    release(MavenPublication) {
      // The coordinates of the library, being set from variables that
      // we'll set up later
      groupId module_group
      artifactId module_name
      version versions.publish_version

      // Two artifacts, the `aar` (or `jar`) and the sources
      if (project.plugins.findPlugin("com.android.library")) {
        artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
      } else {
        artifact("$buildDir/libs/${project.getName()}-${version}.jar")
      }
      artifact androidSourcesJar

      // Mostly self-explanatory metadata
      pom {
        packaging 'aar'
        name = module_name
        description = '😍 A beautiful, fluid, and extensible dialogs API for Kotlin & Android.'
        url = 'https://github.com/afollestad/material-dialogs'
        licenses {
          license {
            name = 'Apache 2.0 License'
            url = 'https://github.com/afollestad/material-dialogs/blob/main/LICENSE.md'
          }
        }
        developers {
          developer {
            id = 'afollestad'
            name = 'Aidan Follestad'
            email = 'dont-email-me@af.codes'
          }
          // Add all other devs here...
        }
        // Version control info - if you're using GitHub, follow the format as seen here
        scm {
          connection = 'scm:git:github.com/afollestad/material-dialogs.git'
          developerConnection = 'scm:git:ssh://github.com/afollestad/material-dialogs.git'
          url = 'https://github.com/afollestad/material-dialogs/tree/main'
        }
        // A slightly hacky fix so that your POM will include any transitive dependencies
        // that your library builds upon
        withXml {
          def dependenciesNode = asNode().appendNode('dependencies')
          project.configurations.implementation.allDependencies.each {
            def dependencyNode = dependenciesNode.appendNode('dependency')
            dependencyNode.appendNode('groupId', it.group)
            dependencyNode.appendNode('artifactId', it.name)
            dependencyNode.appendNode('version', it.version)
          }
        }
      }
    }
  }
  // The repository to publish to, Sonatype/MavenCentral
  repositories {
    maven {
      // This is an arbitrary name, you may also use "mavencentral" or
      // any other name that's descriptive for you
      name = "sonatype"
      url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
      credentials {
        username ossrhUsername
        password ossrhPassword
      }
    }
  }
}

signing {
  sign publishing.publications
}

afterEvaluate {
  publishReleasePublicationToSonatypeRepository.dependsOn assembleRelease
}