plugins {
	id 'com.android.application'
}

android {
	compileSdk 31
	ndkVersion '25.2.9519653'

	defaultConfig {
		applicationId "is.xyz.vcmi"
		minSdk 19
		targetSdk 31
		versionCode 1201
		versionName "1.2.1"
		setProperty("archivesBaseName", "vcmi")
	}

	signingConfigs {
		releaseSigning
		dailySigning
		LoadSigningConfig("releaseSigning")
		LoadSigningConfig("dailySigning")
	}

	buildTypes {
		debug {
			debuggable true
			applicationIdSuffix '.debug'
			manifestPlaceholders = [
				applicationLabel: 'VCMI debug',
			]
			ndk {
				debugSymbolLevel 'full'
			}
		}
		release {
			minifyEnabled false
			zipAlignEnabled true
			signingConfig signingConfigs.releaseSigning
			proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
			manifestPlaceholders = [
				applicationLabel: '@string/app_name',
			]
			ndk {
				debugSymbolLevel 'symbol_table'
			}
		}
		daily {
			initWith release
			applicationIdSuffix '.daily'
			signingConfig signingConfigs.dailySigning
			manifestPlaceholders = [
				applicationLabel: 'VCMI daily',
			]
		}
	}

	applicationVariants.all { variant -> RenameOutput(project.archivesBaseName, variant) }

	tasks.withType(JavaCompile) {
		options.compilerArgs += ["-Xlint:deprecation"]
	}

	compileOptions {
		sourceCompatibility JavaVersion.VERSION_1_8
		targetCompatibility JavaVersion.VERSION_1_8
	}

	buildFeatures {
		viewBinding true
		dataBinding true
	}
}

def RenameOutput(final baseName, final variant) {
	final def buildTaskId = System.getenv("GITHUB_RUN_ID")

	ResolveGitInfo()

	def name = baseName + "-" + ext.gitInfoVcmi

	if (buildTaskId != null && !buildTaskId.isEmpty()) {
		name = buildTaskId + "-" + name
	}

	if (!variant.buildType.name != "release") {
		name += "-" + variant.buildType.name
	}

	variant.outputs.each { output ->
		def oldPath = output.outputFile.getAbsolutePath()
		output.outputFileName = name + oldPath.substring(oldPath.lastIndexOf("."))
	}
}

def CommandOutput(final cmd, final arguments, final cwd) {
	try {
		new ByteArrayOutputStream().withStream { final os ->
			exec {
				executable cmd
				args arguments
				workingDir cwd
				standardOutput os
			}
			return os.toString().trim()
		}
	}
	catch (final Exception ex) {
		print("Broken: " + cmd + " " + arguments + " in " + cwd + " :: " + ex.toString())
		return ""
	}
}

def ResolveGitInfo() {
	if (ext.gitInfoVcmi != "none") {
		return
	}
	ext.gitInfoVcmi =
		CommandOutput("git", ["log", "-1", "--pretty=%D", "--decorate-refs=refs/remotes/origin/*"], ".").replace("origin/", "").replace(", HEAD", "").replaceAll("[^a-zA-Z0-9\\-_]", "_") +
		"-" +
		CommandOutput("git", ["describe", "--match=", "--always", "--abbrev=7"], ".")
}

def SigningPropertiesPath(final basePath, final signingConfigKey) {
	return file("${basePath}/${signingConfigKey}.properties")
}

def SigningKeystorePath(final basePath, final keystoreFileName) {
	return file("${basePath}/${keystoreFileName}")
}

def LoadSigningConfig(final signingConfigKey) {
	final def projectRoot = "${project.projectDir}/../../CI/android"
	final def props = new Properties()
	final def propFile = SigningPropertiesPath(projectRoot, signingConfigKey)
	
	def signingConfig = android.signingConfigs.getAt(signingConfigKey)
	
	if (propFile.canRead()) {
		props.load(new FileInputStream(propFile))

		if (props != null
			&& props.containsKey('STORE_FILE')
			&& props.containsKey('KEY_ALIAS')) {

			signingConfig.storeFile = SigningKeystorePath(projectRoot, props['STORE_FILE'])
			signingConfig.storePassword = props['STORE_PASSWORD']
			signingConfig.keyAlias = props['KEY_ALIAS']
			
			if(props.containsKey('STORE_PASSWORD'))
				signingConfig.storePassword = props['STORE_PASSWORD']
			else
				signingConfig.storePassword = System.getenv("ANDROID_STORE_PASSWORD")
			
			if(props.containsKey('KEY_PASSWORD'))
				signingConfig.keyPassword = props['KEY_PASSWORD']
			else
				signingConfig.keyPassword = System.getenv("ANDROID_KEY_PASSWORD")
		} else {
			println("Some props from signing file are missing")
			android.signingConfigs.putAt(signingConfigKey, null)
		}
	} else {
		println("file with signing properties is missing")
		android.signingConfigs.putAt(signingConfigKey, null)
	}
}

dependencies {
	implementation 'androidx.appcompat:appcompat:1.2.0'
	implementation 'com.google.android.material:material:1.3.0'
	implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
	implementation 'com.google.android.gms:play-services-base:18.2.0'
	implementation 'com.google.android.gms:play-services-basement:18.1.0'
}