pipeline {
    agent any

    parameters {
        choice(name: 'ENVIRONMENT', choices: ['qa', 'prod'], description: 'The environment to run against.')
        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.')
    }

    environment {
        COLLAB_DB_USER = 'collab_env'
        COLLAB_DB_DBNAME = 'ows_collaborator'
        COLLAB_DB_HOST = "${params.ENVIRONMENT}-ows-collaborator.cluster-cb22xqmk0y0q.us-east-1.rds.amazonaws.com"
        SNOWFLAKE_USER = "${params.ENVIRONMENT}_ows_collaborator"
        SNOWFLAKE_ROLE = "${params.ENVIRONMENT}_ows_collaborator"
        SNOWFLAKE_WAREHOUSE = "${params.ENVIRONMENT}_ows_warehouse"
        ENVIRONMENT = "${params.ENVIRONMENT}"
    }

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

        stage('Migrate collaborators data') {
            steps {
                withEcr {
                    withCredentials([aws(credentialsId: "${params.ENVIRONMENT}-collaborator-report-trigger")]){
                        withSecrets(secrets: [
                            [id: "${params.ENVIRONMENT}/ows-collaborator/COLLAB_DB_PASS", environmentVariable: 'COLLAB_DB_PASS'],
                            [id: "${params.ENVIRONMENT}/ows-collaborator/SNOWFLAKE_PRIVATE_KEY", environmentVariable: 'SNOWFLAKE_PRIVATE_KEY'],
                            [id: "${params.ENVIRONMENT}/ows-collaborator/SNOWFLAKE_KEY_PASSPHRASE", environmentVariable: 'SNOWFLAKE_KEY_PASSPHRASE'],
                            [id: "${params.ENVIRONMENT}/datadog/DD_API_KEY", environmentVariable: 'DD_API_KEY'],
                            [id: "${params.ENVIRONMENT}/datadog/DD_APP_KEY", environmentVariable: 'DD_APP_KEY'],
                        ]) {
                            sh '''
                                docker compose run \
                                    --build \
                                    --entrypoint /poetry/bin/poetry \
                                    --env COLLAB_DB_USER=$COLLAB_DB_USER \
                                    --env COLLAB_DB_PASS=$COLLAB_DB_PASS \
                                    --env COLLAB_DB_HOST=$COLLAB_DB_HOST \
                                    --env COLLAB_DB_DBNAME=$COLLAB_DB_DBNAME \
                                    --env DD_API_KEY=$DD_API_KEY \
                                    --env DD_APP_KEY=$DD_APP_KEY \
                                    --env SPLITIO_API_KEY=localhost \
                                    --env AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
                                    --env AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
                                    --env SNOWFLAKE_ACCOUNT=sme-delphi \
                                    --env SNOWFLAKE_USER=$SNOWFLAKE_USER \
                                    --env SNOWFLAKE_ROLE=$SNOWFLAKE_ROLE \
                                    --env SNOWFLAKE_WAREHOUSE=$SNOWFLAKE_WAREHOUSE \
                                    --env SNOWFLAKE_PRIVATE_KEY="$SNOWFLAKE_PRIVATE_KEY" \
                                    --env SNOWFLAKE_KEY_PASSPHRASE=$SNOWFLAKE_KEY_PASSPHRASE \
                                    --env Environment=$ENVIRONMENT \
                                    dev \
                                    run python -m scripts.altafonte_migration.collaborators_migrate \
                                    2>&1
                            '''
                        }
                    }
                }
            }
        }

    }
    
    post {
        failure {
            slackSend(
                channel: '#collaborators-alerts',
                color: 'danger',
                message: "Collaborators migration failed in ${params.ENVIRONMENT}")
        }
        success {
            slackSend(
                channel: '#collaborators-alerts',
                color: 'good',
                message: "Collaborators migration succeeded in ${params.ENVIRONMENT}")
        }
    }
}
