pipeline {
    agent any
    environment {
        SONARQUBE_PATH = '/var/lib/jenkins/tools/sonar-scanner-4.2.0.1873-linux/bin/sonar-scanner -Dsonar.projectKey=Infinitheism-qa-BE -Dsonar.sources=./src'
        LINK = 'https://api.portal.qa.divami.com'
        //fd_secret_ignore
        GOOGLE_CHAT_LINK = 'https://chat.googleapis.com/v1/spaces/AAAA6Wtz7Xg/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=UcaW1-lHiYQtM06nI_Ng6nxuBdpI44N6cYyrpuzeG4k'
    }
    stages {
        stage('SonarScan') {
            steps {
                script {
                    nodejs('Infinitheism') {
                        withSonarQubeEnv('Sonar') {
                            sh "${env.SONARQUBE_PATH}"
                        }
                    }
                }
            }
        }
        stage('Quality Gate') {
            steps {
                script {
                    def qg = waitForQualityGate()
                    if (qg.status != 'OK') {
                        error "Pipeline aborted due to quality gate failure: ${qg.status}"
                    }
                }
            }
        }
        stage('Tests') {
            steps {
                script {
                    try {
                        nodejs('Infinitheism') {
                            echo 'Testing'
                            sh 'npm run test'
                        }
                    } catch (Exception e) {
                        echo 'Test cases failed!!'
                        echo "Error message: ${e.toString()}"
                    }
                }
            }
        }
        stage('Deployment') {
            steps {
                script {
                    echo "Deploying"
                    sh 'tar -cvzf dist.tar.gz *'
                    // sh 'ssh infinipath@api.infinidev.divami.com "cd /var/www/html/infinitheism-qa-backend/infinitheism-backend && sudo rm -rf *"'
                    sh 'scp dist.tar.gz infinipath@api.infinidev.divami.com:/var/www/html/infinitheism-qa-backend/infinitheism-backend'
                    sh 'ssh infinipath@api.infinidev.divami.com "cd /var/www/html/infinitheism-qa-backend/infinitheism-backend && sudo tar -xvzf dist.tar.gz"'
                    sh 'ssh infinipath@api.infinidev.divami.com "cd /var/www/html/infinitheism-qa-backend/infinitheism-backend && sudo chown -R infinipath:infinipath *"'
                    sh 'ssh infinipath@api.infinidev.divami.com "cd /var/www/html/infinitheism-qa-backend/infinitheism-backend && source /home/infinipath/.nvm/nvm.sh && nvm use 23.11.0 && /home/infinipath/.nvm/versions/node/v23.11.0/bin/npm i"'
                    sh 'ssh infinipath@api.infinidev.divami.com "cd /var/www/html/infinitheism-qa-backend/infinitheism-backend/devops/scripts && sudo chmod +x start-server-qa.sh"'
                    sh 'ssh infinipath@api.infinidev.divami.com "sudo systemctl restart infini-qa.service"'
                }
            }
        }
    }
    post {
        always { 
            script{
                def message = "Project Name: ${JOB_NAME}\n" +
                                "Build Number: ${BUILD_NUMBER}\n" +
                                "Git Branch: ${GIT_BRANCH}\n" +
                                "Environment: qa\n"
        
                def buildResult = currentBuild.currentResult
                if (buildResult == "SUCCESS") {
                    message +=  "Output: ${LINK}\n" +
                                "Build Result: Success"
                } 
                else {
                    message += "Output Log: ${RUN_DISPLAY_URL}\n" +
                                "Build Result: Failed"
                }
                googlechatnotification message: message, url: "${GOOGLE_CHAT_LINK}"
                cleanWs()
            }
        }
    }
}