apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin:'application'

archivesBaseName = 'gadgetbridge-daogenerator'

dependencies {
    // https://github.com/Freeyourgadget/greenDAO/tree/fyg
    implementation 'org.greenrobot:greendao-generator:2.2.0'
}

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
}

mainClassName = "nodomain.freeyourgadget.gadgetbridge.daogen.GBDaoGenerator"

tasks.register('genSources', JavaExec) {
    mainClass = mainClassName
    classpath = sourceSets.main.runtimeClasspath
    workingDir = '../'
    doLast {
        // 官方 Gadgetbridge 使用 Freeyourgadget/greenDAO 分支，会生成
        // PRIMARY KEY ("TIMESTAMP","DEVICE_ID")。本仓库仍用原版 greendao-generator，
        // 会把复合主键写成两列各自 PRIMARY KEY，新系统 SQLite（含华为）会直接报错闪退。
        def dir = file("${project.rootDir}/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities")
        int patched = 0
        dir.eachFileMatch(~/.*Dao\.java/) { f ->
            def src = f.getText('UTF-8')
            def methodRe = ~/(?s)(public static void createTable\(SQLiteDatabase db, boolean ifNotExists\) \{.*?\n    \})/
            def next = src.replaceAll(methodRe) { all, method ->
                def pks = []
                def colRe = ~/"\\"([A-Z0-9_]+)\\" (?:INTEGER|TEXT|REAL|BLOB) PRIMARY KEY/
                (method =~ colRe).each { m -> pks << m[1] }
                if (pks.size() <= 1) return method
                def out = method.replaceAll(/ PRIMARY KEY/, '')
                def pkSql = 'PRIMARY KEY (\\"' + pks.join('\\", \\"') + '\\")'
                def closeIdx = out.indexOf(');");')
                if (closeIdx < 0) return method
                return out.substring(0, closeIdx) + ', ' + pkSql + ');");' + out.substring(closeIdx + 5)
            }
            if (next != src) {
                f.write(next, 'UTF-8')
                patched++
            }
        }
        println "fixCompositePrimaryKeys: patched ${patched} DAO files"
    }
}

artifacts {
    archives jar
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

tasks.named("distTar") {
    duplicatesStrategy = 'include'
}

tasks.named("distZip") {
    duplicatesStrategy = 'include'
}
