String QA_AWS_ACCOUNT_ID = '619719722105'
String QA_AWS_ROLE = 'qa-songwhip-api-scheduler-role'
String QA_SECRET_ID = 'qa/songwhip-api/SONGWHIP_WEBHOOK_KEY'
String PROD_AWS_ACCOUNT_ID = '926734670777'
String PROD_AWS_ROLE = 'prod-songwhip-api-scheduler-role'
String PROD_SECRET_ID = 'prod/songwhip-api/SONGWHIP_WEBHOOK_KEY'
String SLACK_NOTIFY_CHANNEL = '#songwhip-dev-alerts'

pipeline {
    agent any

    triggers {
        cron('H/30 * * * *')
    }

    options {
        ansiColor('xterm')
        timestamps()
    }

    parameters {
        string(name: 'SHARED_LIBRARIES_VERSION', defaultValue: 'master', description: 'The version of the Jenkins shared libraries to use. Can be a branch, tag or Git revision.')
    }

    stages {
        stage('Load Shared Libraries') {
            steps {
                library "jenkins-global-libraries@${params.SHARED_LIBRARIES_VERSION}"
            }
        }

        stage('Upgrade pending prereleases') {
            parallel {
                stage('QA') {
                    environment {
                        SONGWHIP_API_URL = 'https://api-staging.songwhip.com'
                    }
                    steps {
                        withAWS(roleAccount: QA_AWS_ACCOUNT_ID, role: QA_AWS_ROLE, roleSessionName: env.BUILD_TAG, useNode: true) {
                            withSecrets(secrets: [
                                [
                                    id: QA_SECRET_ID,
                                    environmentVariable: 'SONGWHIP_WEBHOOK_KEY'
                                ]
                            ]) {
                                script {
                                    sh './scheduler/upgrade_pending_prereleases/run.sh'
                                }
                            }
                        }
                    }
                }

                stage('Prod') {
                    environment {
                        SONGWHIP_API_URL = 'https://api.songwhip.com'
                    }
                    steps {
                        withAWS(roleAccount: PROD_AWS_ACCOUNT_ID, role: PROD_AWS_ROLE, roleSessionName: env.BUILD_TAG, useNode: true) {
                            withSecrets(secrets: [
                                [
                                    id: PROD_SECRET_ID,
                                    environmentVariable: 'SONGWHIP_WEBHOOK_KEY'
                                ]
                            ]) {
                                script {
                                    sh './scheduler/upgrade_pending_prereleases/run.sh'
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    post {
        failure {
            echo 'Pipeline failed. Check logs for details.'
            slackNotify channel: SLACK_NOTIFY_CHANNEL
        }
        success {
            echo 'Prerelease upgrade job completed successfully.'
        }
    }
}