apply plugin: 'android'
import org.ajoberstar.grgit.Grgit

android {
  compileSdkVersion 21
  buildToolsVersion "22.0.1"

  signingConfigs {
    release {
      storeFile project.hasProperty('storeFileProperty') ? file(storeFileProperty) : null
      storePassword project.hasProperty('storePasswordProperty') ?  storePasswordProperty : ""
      keyAlias project.hasProperty('keyAliasProperty') ?  keyAliasProperty : ""
      keyPassword project.hasProperty('keyPasswordProperty') ?  keyPasswordProperty : ""
    }
  }

  buildTypes {
    release {
      //runProguard true
      if(signingConfigs.contains(release))
	signingConfig signingConfigs.release.isSigningReady() ? signingConfigs.release : signingConfigs.debug
    }
  }

  lintOptions {
    abortOnError false
  }

  sourceSets {
    main {
      assets.srcDirs = ['assets', 'ovpnlibs/assets']
      jniLibs.srcDirs = ['ovpnlibs/jniLibs']
      jni.srcDirs = [] //disable automatic ndk-build
    }
    debug {
      assets.srcDirs = ['src/debug/assets']
    }
  }
}

dependencies {
  androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.4.1'
  compile 'com.jakewharton:butterknife:6.1.0'
  provided 'com.squareup.dagger:dagger-compiler:1.2.2'
  compile 'com.github.pedrovgs:renderers:1.5'
  compile 'com.intellij:annotations:12.0'
  compile 'com.google.code.gson:gson:2.3.1'
  compile 'org.thoughtcrime.ssl.pinning:AndroidPinning:1.0.0'
  compile 'mbanje.kurt:fabbutton:1.1.1'
}

def processFileInplace(file, Closure processText) {
  def text = file.text
  file.write(processText(text))
}

task copyIcsOpenVPNClasses( type: Copy ) {
  println "copyIcsOpenVPNClasses"
  from ('../ics-openvpn/main/') {
    include '**/LaunchVPN.java'
    include '**/OpenVPNSservice.java'
    include '**/VpnProfile.java'
    include '**/DisconnectVPN.java'
    include '**/VpnProfile.java'
    include '**/LogWindow.java'
    include '**/LogFragment.java'
    include '**/SeekBarTicks.java'
    include '**/log_window.xml'
    include '**/log_fragment.xml'
    include '**/log_silders.xml'
    include '**/vpnstatus.xml'
    include '**/styles.xml'
    include '**/dimens.xml'
    include '**/logmenu.xml'
    include '**/core/**.java'

    includeEmptyDirs = false
    
    filter {
      line -> line.replaceAll('de.blinkt.openvpn.R', 'se.leap.bitmaskclient.R')
    }
    filter {
      line -> line.replaceAll('de.blinkt.openvpn.BuildConfig', 'se.leap.bitmaskclient.BuildConfig')
    }
    filter {      
      line -> line.replace('package de.blinkt.openvpn;', 'package de.blinkt.openvpn;\n\nimport se.leap.bitmaskclient.R;')
    }
  } into '.'
}

task copyIcsOpenVPNXml( type: Copy )  {
  println "copyIcsOpenVPNXml"
  from ('../ics-openvpn/main/') {
    include '**/strings.xml'
    include '**/log_*.xml'
    include '**/vpnstatus.xml'
    include '**/styles.xml'
    include '**/dimens.xml'
    include '**/refs.xml'
    include '**/colours.xml'    
    include '**/logmenu.xml'
    include '**/white_rect.xml'
    includeEmptyDirs = false
    
    rename 'strings.xml', 'strings-icsopenvpn.xml'
    filter {
      line -> line.replaceAll('.*name="app".*', '')
    }
  } into '.'
}

task copyIcsOpenVPNImages( type: Copy ) {
  println "copyIcsOpenVPNImages"
  from ('../ics-openvpn/main/') {
    include '**/ic_filter*.png'
    include '**/ic_delete*.png'
    include '**/ic_share*.png'
    include '**/ic_close*.png'
    include '**/ic_edit*.png'
    include '**/ic_check*.png'

    includeEmptyDirs = false
  } into '.'
}

// thanks to http://pleac.sourceforge.net/pleac_groovy/fileaccess.html
task removeDuplicatedStrings() {
  println "removeDuplicatedStrings"
  new File('.').eachFileRecurse {
    if(it.name.equals('strings.xml')) {
      def ics_openvpn_file = file(it.absolutePath.replace('strings.xml', 'strings-icsopenvpn.xml'))
      if(ics_openvpn_file.exists()) {
	def ics_openvpn_strings_names = (new XmlParser()).parse(ics_openvpn_file)
	def current_file = it
      
	ics_openvpn_strings_names.string.each {
	  processFileInplace(current_file) { text ->
	    text.replaceAll('.*name=\"' + it.attribute('name') + '\".*(\n)*.*string>.*\n+', '')
	  }
	}
      }
    }
  }
}

task mergeUntranslatable( type: Copy ) {
  println "mergeUntranslatable"
  from ('../ics-openvpn/main/') {
    include '**/untranslatable.xml'
    rename 'untranslatable.xml', 'untranslatable-icsopenvpn.xml'
  } into '.'
  def bitmask_untranslatable = file('src/main/res/values/untranslatable.xml')
  def ics_openvpn_untranslatable = new File(bitmask_untranslatable.path.replace('untranslatable.xml', 'untranslatable-icsopenvpn.xml'))
  ics_openvpn_untranslatable.createNewFile()
  def string_continuation = false;
  ics_openvpn_untranslatable.eachLine { text ->
    if(text.contains('string name=')) {
      if(!bitmask_untranslatable.text.contains(text))
	bitmask_untranslatable << text
	if(text.contains('</string>'))
	  string_continuation = true
    }
    else if(string_continuation) {
      bitmask_untranslatable << text
    }
    
    if(text.contains('</string>')) {
      string_continuation = false
      bitmask_untranslatable << System.getProperty("line.separator")
    }
  }
  
  bitmask_untranslatable.write(bitmask_untranslatable.text.replaceAll("</resources>", ""))
  bitmask_untranslatable << "</resources>"

  delete ics_openvpn_untranslatable
}

task copyIcsOpenVPNFiles( type: Copy ) {
  println "copyIcsOpenVPNFiles"
  copyIcsOpenVPNClasses.execute()
  copyIcsOpenVPNXml.execute()
  copyIcsOpenVPNImages.execute()
  //mergeUntranslatable.execute()
  removeDuplicatedStrings.execute()
}

task updateIcsOpenVpn( type: Exec ) {
  commandLine 'git', 'submodule', 'update', '--init', '--recursive'
  copyIcsOpenVPNFiles.execute()
}

task buildNative ( type: Exec ) {
  println "buildNative"
  commandLine 'sh', 'misc/build-native.sh', 'USE_BREAKPAD=0', '-j 8'
}

preBuild.dependsOn buildNative