def getVersionFile() {
    return file('versioning/version.properties')
}

def getVersionProps() {
    def versionProps = new Properties()
    getVersionFile().withInputStream {stream -> versionProps.load(stream)}
    return versionProps
}

private String getVersionNamePatch() {
    return (getVersionProps()['versionName'] =~ /[^.]+/)[2].toString()
}

private Integer getVersionNameMinor() {
    return (getVersionProps()['versionName'] =~ /\d+/)[1].toInteger()
}

private Integer getVersionNameMajor() {
    return (getVersionProps()['versionName'] =~ /\d+/)[0].toInteger()
}

ext.getAppVersionCode = {
    getVersionProps()['versionCode'].toInteger()
}

ext.getAppVersionName = {
    project.findProperty('projVersion') ?: getVersionProps()['versionName'].toString()
}

private void saveChanges(String versionName) {
    def versionProps = getVersionProps()
    versionProps['versionName'] = versionName
    versionProps.store(getVersionFile().newWriter(), null)
}

task versionSnapshot {
    doLast {
        def versionNameMajor = getVersionNameMajor()
        def versionNameMinor = getVersionNameMinor()
        def versionNamePatch = getVersionNamePatch()
        def versionName = "${versionNameMajor}.${versionNameMinor}.${versionNamePatch}-SNAPSHOT".toString()
        saveChanges(versionName)
    }
}
