pipeline {
    agent any

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

    triggers {
        cron('0 5 * * 0') // Every Sunday at 5 AM
    }

    parameters {
        choice(
            name: 'Action',
            choices: [
                'Run ABACUS E2E Tests',
                'Clear Runcontrollers',
                'Close Open periods'
            ],
            description: 'Select the action to perform'
        )
    }

    stages {
        stage('Load Shared Libraries') {
            steps {
                library "jenkins-global-libraries@master"
            }
        }

        stage('Clear Runcontrollers') {
            when {
                anyOf {
                    expression { params.Action == 'Clear Runcontrollers' }
                    expression { params.Action == 'Run ABACUS E2E Tests' }
                    expression { currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() > 0 }
                }
            }
            steps {
                withCredentials([aws(credentialsId: 'cucumber-tests')]) {
                    sh './frameworkRunner.sh make abacus_delete_runcontrollers'
                }
            }
        }

        stage('Close Open periods') {
            when {
                anyOf {
                    expression { params.Action == 'Close Open periods' }
                    expression { params.Action == 'Run ABACUS E2E Tests' }
                    expression { currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() > 0 }
                }
            }
            steps {
                withCredentials([aws(credentialsId: 'cucumber-tests')]) {
                    sh './frameworkRunner.sh make abacus_close_accounting_periods'
                }
            }
        }

        stage('Run ABACUS E2E Tests') {
            when {
                anyOf {
                    expression { params.Action == 'Run ABACUS E2E Tests' }
                    expression { currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() > 0 }
                }
            }
            environment {
                TAGS = "@accounting-run"
            }
            steps {
                withCredentials([aws(credentialsId: 'cucumber-tests')]) {
                    sh './frameworkRunner.sh make abacus_accounting_run_setup'
                    e2eTests tags: env.TAGS, envVars:['TRIES':'1']
                }
            }    
            post {
                regression {
                    slackNotify channel: '#e2e-test-results'
                }
                fixed {
                    slackNotify channel: '#e2e-test-results'
                }
            }
        }
    }
}