// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    // android
    alias(libs.plugins.androidApplication) apply false
    alias(libs.plugins.androidLibrary) apply false
    // kotlin
    alias(libs.plugins.kotlinAndroid) apply false
    // kotlin-serialization
    alias(libs.plugins.kotlinSerialization) apply false
    // protobuf
    alias(libs.plugins.protobuf) apply false
    // navigation-safe-args
    alias(libs.plugins.navigationSafeArgs) apply false
    // hilt-android
    alias(libs.plugins.hilt) apply false
    // ksp
    //alias(libs.plugins.ksp) apply false
    // check versions
    alias(libs.plugins.versions)
    // graph
    alias(libs.plugins.moduleGraph) apply true // Plugin applied to allow module graph generation

    alias(libs.plugins.kotlin.kapt)
}
// Task to print all the module paths in the project e.g. :core:data
// Used by module graph generator script
tasks.register("printModulePaths") {
    subprojects { subproject ->
        if (subprojects.size() == 0) {
            println(subproject.path)
        }
    }
}


subprojects { subproject ->
    if (subproject.getSubprojects().size() == 0) {
        if (subproject.toString().endsWith(":app'")) {
            apply plugin: 'com.android.application'
        } else {
            apply plugin: 'com.android.library'
        }

        android {
            if (!subproject.toString().endsWith(":app'")) {
                resourcePrefix = getResourcePrefix(path)
            }
        }
    }
}

private static String getResourcePrefix(String name) {
    String[] split = name.split("\\W")
    StringBuilder result = new StringBuilder()
    for (int i = 1; i < split.length; i++) {
        if (i > 1 && split[i] == split[i - 1]) {
            continue
        }
        result.append(split[i].toLowerCase()).append("_")
    }
    return result.toString()
}
