pipeline {
    agent {
         label 'mac-mini'
    }

    parameters {
        choice(name: 'ENVIRONMENT', choices: ['profile', 'release'], description: '请选择一个构建环境')
    }
    stages {
        stage('Flutter Clean') {
            steps {
//                sh '''
//                cd /Users/itdev/AndroidStudioProjects/spms-flutter-pda
//             git pull
//         /opt/homebrew/bin/fvm global flutter3.13.2
//        '''
                sh """#!/bin/bash
                source ~/.zshrc
                flutter clean
                flutter pub get
                """
                echo 'Flutter Clean Finish!'
            }
        }

        stage('Flutter Build') {
            steps {
                script {
                    def obfuscation = ''
                    switch (params.ENVIRONMENT) {
                        case 'profile':
                            break
                        case 'release':
                            String obfuscatePath = "build/obfuscate/release"
                            sh """
                            if [ ! -d $obfuscatePath ]; then
                                mkdir -p $obfuscatePath
                            fi
                            """
                            obfuscation = " --obfuscate --split-debug-info=$obfuscatePath "
                            break
                        default:
                            break
                    }
                    def formattedDate = new Date().format("yyyy-MM-dd-HH-mm", TimeZone.getTimeZone("PRC"))
                    def targetLoc="build/spms-release-tf.apk"
                    writeFile(file: "formattedDate", text: "${formattedDate}")
                    // 构建命令apk/aab
                    def buildCMD
                    if (params.ENVIRONMENT == 'profile') {
                        targetLoc="build/spms-${formattedDate}-profile.apk"
//                         writeFile(file: "profileLoc", text: "${targetLoc}")
                        buildCMD = 'flutter build apk --profile ' +
                                obfuscation +
                                ' && mv build/app/outputs/flutter-apk/app-profile.apk ' +
                                "${targetLoc}"
                    } else {
                        buildCMD = "flutter build apk --release" +
                                obfuscation +
                                "--target-platform android-arm,android-arm64,android-x64" +
                                " && mv build/app/outputs/flutter-apk/app-release.apk " +
                                "${targetLoc}"
                    }
                    echo 'start' + buildCMD
//                    sh "                cd /Users/itdev/AndroidStudioProjects/spms-flutter-pda"
                    sh """#!/bin/bash
                       source ~/.zshrc
                       ${buildCMD}
                       """
                    echo 'Flutter Build Finish!'
//                    sh '''
//
//         /opt/homebrew/bin/fvm global flutter3.3.4
//        '''
                }
            }
        }
        stage('Upload to MinIO') {
            steps {
                script {
                    // 读取 pubspec.yaml 文件中的版本行
                    def versionLine = readFile('pubspec.yaml')
                        .split('\n')
                        .find { it.startsWith('version:') }
                    String versionInfoFileName="spmsVersion.json"
                    def versionName
                    def buildNumber
                    // 检查是否找到版本行
                    if (versionLine) {
                        // 提取版本名称和构建版本号
                        def versionParts = versionLine.split(':')[1].trim().split('\\+')
                        versionName = versionParts[0] // 版本名称，例如 "5.0.2"
                        buildNumber = versionParts.size() > 1 ? versionParts[1] : '' // 构建版本号，例如 "26" 或者为空字符串（如果没有加号）

                        // 构建输出字符串并打印
                        String output = "{\"buildNumber\":${buildNumber},\"buildName\":\"${versionName}\"}"
                         // 将字符串写入文件
                        writeFile(file: versionInfoFileName, text: output)
                        echo output
                    } else {
                        echo "无法找到版本信息"
                    }
                    //minio上传工具mc
                    def mcTool="/opt/homebrew/bin/mc"
                    //存在.mc文件夹里的配置结构名称
                    def minioConf="spms"
                    //桶名称
                    def bucketName="spms"

                    def targetLoc="build/spms-release-tf.apk"
                    def minIoEndPoint="http://minio-sit.sunda.top"
                    def apkUrl
                    def qrcodeName
                    def qrcodeUrl

                    if(params.ENVIRONMENT=='release'){
                        apkUrl="${minIoEndPoint}/${bucketName}/apk/spms-release-tf.apk"
                        qrcodeName="release-qrcode-tf"//release固定一个qrCode
                        qrcodeUrl="${minIoEndPoint}/${bucketName}/${qrcodeName}.png"
                        sh """
                           ${mcTool} cp "${versionInfoFileName}" "${minioConf}/${bucketName}/"
                           ${mcTool} cp "${targetLoc}" "${minioConf}/${bucketName}/apk/"
                           python3 ./build_qrcode.py "${apkUrl}" "${qrcodeName}" "build"
                           ${mcTool} cp "build/${qrcodeName}.png" "${minioConf}/${bucketName}/"
                           """
                        echo "打包完成！文件在项目下：${targetLoc}，文件已上传到 MinIO"
                    }else if(params.ENVIRONMENT=='profile'){
                        //读取打包生成的文件时间
                        def formattedDate=readFile(file:"formattedDate")
                        apkUrl="${minIoEndPoint}/${bucketName}/apk/spms-${formattedDate}-profile.apk"
                        qrcodeName="${formattedDate}"//profile一次一个
                        qrcodeUrl="${minIoEndPoint}/${bucketName}/profileQRCode/${qrcodeName}.png"
                        sh """
                           ${mcTool} cp "build/spms-${formattedDate}-profile.apk" "${minioConf}/${bucketName}/apk/"
                           python3 ./build_qrcode.py "${apkUrl}" "${qrcodeName}" "build"
                           ${mcTool} cp "build/${qrcodeName}.png" "${minioConf}/${bucketName}/profileQRCode/"
                           """
                        echo "打包完成！文件在项目下：build/spms-${formattedDate}-profile.apk，文件已上传到 MinIO"
                    }

                    //通知到企业微信群
                    sh """
                    . ./functions.sh
                    sendNewsToQW ${apkUrl} "tf_dev" "v${versionName}-${buildNumber}-${params.ENVIRONMENT}" ${qrcodeUrl}
                    """
                    echo "发送到企业微信群"

                }
            }
        }
    }
}