plugins {
    alias(libs.plugins.android.application)
}

// =========================================================================
// 核心版號與自動連動定義
// 每次發佈新版本給機台時，只需遞增 verPatch (修補版號)。
// 例如：從 5 改為 6，對應的 versionName 就會自動變成 "10_08_6_R"，
// versionCode 就會自動變大為 100806，以正確觸發實體機台的 OTA 自動更新。
// =========================================================================
def verMajor = 10
def verMinor = 1
def verPatch = 6

android {
    namespace 'com.unibuy.smartdevice'
    compileSdk 35

    defaultConfig {
        applicationId "com.unibuy.smartdevice"
        minSdk 21
        targetSdk 34
        versionCode verMajor * 10000 + verMinor * 100 + verPatch
        versionName "${verMajor}_0${verMinor}_${verPatch}_R"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    // =====================================================================
    // 雙維度 Flavor：project（客戶專案）× hardware（硬體規格）
    // =====================================================================
    flavorDimensions "project", "hardware"

    productFlavors {
        General {
            dimension "project"
        }

        Chengwai {
            dimension "project"
        }

        Cmuh {
            dimension "project"
        }

        S12XYU {
            dimension "hardware"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.debug
        }
    }

    // 自定義打包檔案名稱，遵循公司命名規範：來源_安卓號_主板號_機器系列_專案名稱_螢幕大小_次版號_修補版號_環境
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def versionName = variant.versionName
            def project = variant.productFlavors[0].name   // project dimension
            def hardware = variant.productFlavors[1].name   // hardware dimension
            def buildType = variant.buildType.name

            // 將 hardware flavor 名稱展開為公司規範格式 S12XYU → S_12_XY_U
            def hwFormatted = hardware
                .replaceAll(/^([A-Z])(\d+)([A-Z]+)([A-Z])$/, '$1_$2_$3_$4')

            // 輸出範例：app-S_12_XY_U_Chengwai-10_08_8_R-release.apk
            output.outputFileName = "app-${hwFormatted}_${project}-${versionName}-${buildType}.apk"
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

    buildFeatures {
        viewBinding true
    }

    packaging {
        resources {
            excludes += ['META-INF/INDEX.LIST', 'META-INF/io.netty.versions.properties']
        }
    }
}

dependencies {
    implementation libs.appcompat
    implementation libs.material
    implementation libs.activity
    implementation libs.constraintlayout
    implementation libs.work.runtime
    testImplementation libs.junit
    androidTestImplementation libs.ext.junit
    androidTestImplementation libs.espresso.core

    annotationProcessor libs.compiler
    implementation libs.usb.serial.for.android
    implementation libs.android.serialport
    implementation libs.glide
    implementation libs.media3.exoplayer
    implementation libs.media3.ui
    implementation libs.tsnackBar

    implementation 'com.blankj:utilcodex:1.31.1'
    implementation 'com.hivemq:hivemq-mqtt-client:1.3.3'
    implementation 'io.netty:netty-codec-http:4.1.94.Final'
    implementation 'io.netty:netty-handler:4.1.94.Final'
    implementation 'com.google.code.gson:gson:2.10.1'
}
