pipeline {
    agent any
    environment {
        ARCHIVE_ROOT = 'ios/build/archive'
        IPA_ROOT = 'ios/build/ipa'
        PLIST_FILE = 'build_script/ios_new/Info.plist'
    }
    parameters {
        choice(name: 'ENVIRONMENT', choices: ['dev', 'sit', 'uat', 'prod'], description: 'Select the deployment environment')
        text(name: 'BUILD_NAME', defaultValue: '1.0.0', description: 'Input the build version name')
    }

    stages {
        stage('Build') {
            steps {
                script {
                    // 获取当前构建ID
                    buildVersionName = params.BUILD_NAME
                    buildVersionNumber = currentBuild.id
                    buildEnv = params.ENVIRONMENT


                    // 在这里执行构建步骤
                    if(params.ENVIRONMENT == 'uat'){
                        VERSION = VERSION + '-uat'
                    }

                    echo 'Flutter Build Start!'
                    echo 'buildVersionName: ' + buildVersionName
                    echo 'buildVersionNumber: ' + buildVersionNumber
                    echo 'buildEnv: ' + buildEnv

                    sh """#!/bin/bash -ilex
                    export LANG=en_US.UTF-8
                    /bin/bash ./refresh.sh
                    rm -rf ios/build
                    flutter build ios --release  --dart-define=ENVIRONMENT=$buildEnv --build-name=$buildVersionName --build-number=$buildVersionNumber
                    """
                    echo 'Flutter Build Finish!'
                }
            }
        }
        stage('Xcode Archive') {
            steps {
                sh '''
                mkdir -p $ARCHIVE_ROOT
                xcodebuild archive \\
                    -workspace "$WORKSPACE/ios/Runner.xcworkspace" \\
                    -scheme "Runner" \\
                    -archivePath "$WORKSPACE/$ARCHIVE_ROOT/archive.xcarchive" \\
                    -configuration "Release" \\
                    -destination "generic/platform=iOS" \\
                '''
                echo 'Xcode Archive Finish!'
            }
        }
        stage('Xcode Export') {
            steps {
                script {
                    sh '''
                    mkdir -p $IPA_ROOT
                    xcodebuild archive \\
                        -exportArchive -archivePath "$WORKSPACE/$ARCHIVE_ROOT/archive.xcarchive" \\
                        -exportPath "$IPA_ROOT" \\
                        -exportOptionsPlist "$WORKSPACE/$PLIST_FILE" \\
                        -destination "generic/platform=iOS" \\
                        -allowProvisioningUpdates
                    '''
                    echo 'Xcode Export Finish!'
                }
            }

        }
        stage('Upload AppStore') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'AppStoreSpecPassword',
                        usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
                    sh '''
                    validate=\$(xcrun altool \\
                        --validate-app \\
                        -f "$IPA_ROOT/Gtleadinglope.ipa" \\
                        -u "$USERNAME" \\
                        -p "$PASSWORD" \\
                        -t ios)
                    if [[ -z "\$validate" ]]; then
                        echo "App Validate fail"
                    else
                        xcrun altool \\
                        --upload-app \\
                        -f "$IPA_ROOT/Gtleadinglope.ipa" \\
                        -u "$USERNAME" \\
                        -p "$PASSWORD" \\
                        -t ios
                    fi
                    '''
                    echo 'Upload AppStore Finish!'
                }
            }

        }
    }
}
