@Library('nf-jenkins-shared-libraries@master')_

repo = "myzrok"
channel = "cd-mop-staging"
color = "good"
tf_version = "1.1.7"

dep_environment = ""
stage_name = ""
link_url = ""
version = ""
fn_msg = ""
image = ""

pipeline {
    agent {
        ecs {
            inheritFrom 'ec2-agent-nodejs'
        }
    }

    environment {
        DOCKER_HUB = credentials('nfdockerhub')
        ELASTICSEARCH = credentials('elasticsearch')
        BITBUCKET_AUTH = credentials('bitbucket_auth')
        BITBUCKET_ADMIN = credentials('bitbucket_admin')
    }

    stages {
        stage("Initialize"){
            steps{
                script{
                    stage_name = env.STAGE_NAME
                    dep_environment = "staging"

                    GIT_HASH = sh(returnStdout: true, script: "git rev-parse --short HEAD").trim()

                    startedUserId = fetch_author_email("${repo}", "${GIT_HASH}")
                    currentBuild.description = "ENV: ${dep_environment}"
                }
            }
        }

//         stage('Create RDS Snapshots') {
//             when { expression { params.database_backup == true }}
//             steps {
//                 script {
//                     DB_IDENTIFIER = "zrok-db-${dep_environment}"
//                     snapshotName = "${DB_IDENTIFIER}-deployment-\$(date +'%Y-%m-%d-%H%M%S')".trim()
//                     account_id = nfAWSAccounts account_name: "zrok"
//                     withAWS(credentials: 'jenkins-central-mgt', region: 'us-east-1', role: 'jenkins-central-mgt', roleAccount: "${account_id}") {
//                         echo "snapshotName: ${snapshotName}"
//                         echo "DB_IDENTIFIER: ${DB_IDENTIFIER}"
//                         echo "account_id: ${account_id}"
//                         sh """
//                             aws rds create-db-snapshot \
//                                 --db-instance-identifier "${DB_IDENTIFIER}" \
//                                 --db-snapshot-identifier "${snapshotName}" \
//                                 --region us-east-1
//                             echo "Snapshot for ${DB_IDENTIFIER}: ${snapshotName}"
//                         """
//                     }
//                 }
//             }
//         }

        stage('Docker Build'){
            steps{
                sh "docker --version"
                sh "aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 447513199460.dkr.ecr.us-east-1.amazonaws.com"
                sh "docker build . -t local/${repo}"
                sh "ls"
            }
        }

        stage('Docker Push'){
            steps{
                script{
                    def tag_suffix = "${new Date().format('yyyyMMddHHmm')}"
                    ECR_TAG = "${GIT_HASH}-release-${tag_suffix}"
                    currentBuild.description = "Git Commit: ${GIT_HASH}\n ECR Tag: ${ECR_TAG}"
                    awsEcrImageCreate("${repo}", "${ECR_TAG}", "production")
                }
            }
        }

        stage('Record SSM'){
            steps {
                script {
                    stage_name = env.STAGE_NAME
                    account_id = nfAWSAccounts account_name: "zrok"
                    withAWS(credentials: 'jenkins-central-mgt', region: 'us-east-1', role:'jenkins-central-mgt',  roleAccount: "${account_id}") {
                        sh "aws ssm put-parameter --name /${dep_environment}/container-image/myzrok --type String --value ${ECR_TAG} --region us-east-1 --overwrite"
                    }
                }
            }
        }

        stage('Terraform') {
            steps {
                script {
                    stage_name = env.STAGE_NAME

                    terraform2 directory: "terraform", environment: "${dep_environment}", tfversion: "${tf_version}"
                    currentBuild.description = "Deploying myzrok image: ${ECR_TAG} to ENV: ${dep_environment}"
                }
            }
        }
    }

    post {
        failure {
            script {
                fn_msg = "Myzrok deployment to ${dep_environment} failed at stage ${stage_name}. Please check link for details."
                color = "danger"
                echo "${fn_msg}"
                send_custom_notification("${startedUserId}", "${repo}", "${channel}", "${fn_msg}", "${color}", "${link_url}")
            }
        }

        success {
            script{
                fn_msg = "Myzrok deployment to ${dep_environment} was successful."
                echo "${fn_msg}"
                send_custom_notification("${startedUserId}", "${repo}", "${channel}", "${fn_msg}", "${color}", "${link_url}")
            }
        }
    }
}