pipeline {
    agent any

    environment {
        REGISTRY = 'git.virtheart.com'
        REGISTRY_OWNER = 'virtheart'
        IMAGE_NAME = "${env.JOB_NAME.replaceAll(/[^a-zA-Z0-9.-]/, '-').toLowerCase()}"
        IMAGE_TAG = "${env.BUILD_NUMBER}"
    }

    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }

        stage('Build Image') {
            steps {
                script {
                    def imageFullName = "${REGISTRY}/${REGISTRY_OWNER}/${IMAGE_NAME}:${IMAGE_TAG}"
                    sh """
                        set -x
                        docker version
                        docker info
                        docker build -t ${imageFullName} . || { echo "Docker build failed"; exit 1; }
                    """
                }
            }
        }

        stage('Push Image') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'docker-registry-credentials', usernameVariable: 'REGISTRY_USERNAME', passwordVariable: 'REGISTRY_PASSWORD')]) {
                    script {
                        def imageFullName = "${REGISTRY}/${REGISTRY_OWNER}/${IMAGE_NAME}:${IMAGE_TAG}"
                        sh """
                            set -x
                            echo ${REGISTRY_PASSWORD} | docker login ${REGISTRY} -u ${REGISTRY_USERNAME} --password-stdin
                            docker push ${imageFullName}
                            docker rmi ${imageFullName}
                        """
                    }
                }
            }
        }

        stage('Deploy Container') {
            steps {
                script {
                    def imageFullName = "${REGISTRY}/${REGISTRY_OWNER}/${IMAGE_NAME}:${IMAGE_TAG}"
                    sh """
                        docker stop ${IMAGE_NAME} || true
                        docker rm ${IMAGE_NAME} || true
                        docker run -d --name ${IMAGE_NAME} \
                            --restart unless-stopped \
                            ${imageFullName}
                    """
                }
            }
        }
    }

    post {
        always {
            cleanWs()
        }
    }
}