sourceSets.main.java.srcDirs = [ "src/" ]

sourceCompatibility = '1.7'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

robovm {
        iosSignIdentity = "iPhone Distribution: CZ.NIC, z.s.p.o. (NQZA4DGKTW)"
        iosSkipSigning = false
}

ext {
	mainClassName = "cz.nic.tablexia.IOSLauncher"
}

// Updates or create a robovm.properties file.
def updateRoboVMProperties(String buildType, String applicationId, String iconName) {
    Properties props = new Properties()
    def propsFile = file('robovm.properties')

    if (!propsFile.exists()) {
        propsFile.createNewFile();
    }

    props.load(propsFile.newDataInputStream())
    props.setProperty('app.name', appName)
    props.setProperty('app.icon', iconName)
    props.setProperty('app.id', applicationId)
    props.setProperty('app.mainclass', mainClassName)
    props.setProperty('app.version', tablexiaVersionName)
    props.setProperty('app.buildtype', buildType)
    props.setProperty('app.build', '' + tablexiaVersionCode)
    props.setProperty('app.executable', appName + '-' + buildType + '-' + tablexiaVersionName)

    props.store(propsFile.newDataOutputStream(), '')
}

// Extracts native libs (*.a) from the native-ios.jar and places them
// under build/libs/ios/.
task copyNatives << {
  file("build/libs/ios/").mkdirs();
  configurations.natives.files.each { jar ->
    def outputDir = null
    if (jar.name.endsWith("natives-ios.jar")) outputDir = file("build/libs/ios")
    if (outputDir != null) {
      copy {
        from zipTree(jar)
        into outputDir
        include "*.a"
      }
    }
  }
}

// Updates a robovm.xml file.
task updateRoboVMXML << {
  def xml = file('robovm.xml')

  if (!xml.exists()) {
    return
  }
  
  // Find all native (*.a) libraries beneath libs
  def libtree = fileTree(dir: 'build/libs', include: '**/*.a')
  
  def config = new groovy.util.XmlParser().parse(xml)
  config.libs.each {libs ->
      libs.children().clear()
      libtree.each { File file ->
          libs.appendNode('lib', 'build/libs/ios/' + file.getName())
      }
  }
  
  def writer = new FileWriter(xml)
  def printer = new XmlNodePrinter(new PrintWriter(writer))
  printer.setPreserveWhitespace true
  printer.print(config)
}

tasks.create(name: "createDebugIPA", type: org.robovm.gradle.tasks.CreateIPATask) {
    doFirst {
	robovm.iosProvisioningProfile = "Tablexia Debug Provisioning"
        updateRoboVMProperties("debug", applicationIdDebug, 'Icon_debug')
    }
}

tasks.create(name: "createReleaseIPA", type: org.robovm.gradle.tasks.CreateIPATask) {
    doFirst {
	robovm.iosProvisioningProfile = "Tablexia Release Provisioning"
        updateRoboVMProperties("release", applicationIdRelease, 'Icon_release')
    }
}

task createIPAFiles() {
    dependsOn createDebugIPA
    dependsOn createReleaseIPA
}

updateRoboVMXML.dependsOn copyNatives
build.dependsOn createDebugIPA
build.dependsOn createReleaseIPA
tasks.eclipse.dependsOn updateRoboVMXML

launchIPhoneSimulator.dependsOn build
launchIPadSimulator.dependsOn build
launchIOSDevice.dependsOn build
createIPA.dependsOn build

createDebugIPA.dependsOn updateRoboVMXML
createReleaseIPA.dependsOn updateRoboVMXML

eclipse.project {
    name = appName + "-ios"
    natures 'org.robovm.eclipse.RoboVMNature'
}