/*
 * Copyright (c) 2026 Meshtastic LLC
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
import com.android.build.api.dsl.LibraryExtension
import com.android.build.api.variant.LibraryAndroidComponentsExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.meshtastic.buildlogic.configureGraphTasks
import org.meshtastic.buildlogic.configureKotlinAndroid
import org.meshtastic.buildlogic.configureTestOptions
import org.meshtastic.buildlogic.disableUnnecessaryAndroidTests

class AndroidLibraryConventionPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            apply(plugin = "com.android.library")
            apply(plugin = "org.gradle.test-retry")
            apply(plugin = "meshtastic.android.lint")
            apply(plugin = "meshtastic.detekt")
            apply(plugin = "meshtastic.spotless")
            apply(plugin = "meshtastic.dokka")
            apply(plugin = "meshtastic.kover")

            extensions.configure<LibraryExtension> {
                configureKotlinAndroid(this)

                defaultConfig {
                    // When flavorless modules depend on flavored modules (like :core:data),
                    // they need a strategy to pick a variant. We default to 'google'.
                    missingDimensionStrategy("marketplace", "google")
                }

                buildTypes { getByName("debug") { enableAndroidTestCoverage = true } }
            }
            extensions.configure<LibraryAndroidComponentsExtension> { disableUnnecessaryAndroidTests(target) }
            configureTestOptions()
            configureGraphTasks()
        }
    }
}
