pipeline {
    agent any

    environment {
        DOCKER_REGISTRY = "${env.DOCKER_REGISTRY ?: 'localhost:5000'}"
        IMAGE_BACKEND  = "${DOCKER_REGISTRY}/gw-backend"
        IMAGE_FRONTEND = "${DOCKER_REGISTRY}/gw-frontend"
        GIT_COMMIT_SHORT = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
        IMAGE_TAG = "${env.BUILD_NUMBER}-${GIT_COMMIT_SHORT}"
    }

    options {
        buildDiscarder(logRotator(numToKeepStr: '10'))
        timeout(time: 30, unit: 'MINUTES')
    }

    stages {

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

        stage('Backend Build') {
            steps {
                dir('NEW/backend') {
                    sh './gradlew clean build -x test --no-daemon'
                }
            }
        }

        stage('Frontend Build') {
            steps {
                dir('NEW/frontend') {
                    sh 'pnpm install --frozen-lockfile'
                    sh 'pnpm build'
                }
            }
        }

        stage('Docker Build & Push') {
            parallel {
                stage('Backend Image') {
                    steps {
                        dir('NEW/backend') {
                            sh """
                                docker build -t ${IMAGE_BACKEND}:${IMAGE_TAG} -t ${IMAGE_BACKEND}:latest .
                                docker push ${IMAGE_BACKEND}:${IMAGE_TAG}
                                docker push ${IMAGE_BACKEND}:latest
                            """
                        }
                    }
                }
                stage('Frontend Image') {
                    steps {
                        dir('NEW/frontend') {
                            sh """
                                docker build -t ${IMAGE_FRONTEND}:${IMAGE_TAG} -t ${IMAGE_FRONTEND}:latest .
                                docker push ${IMAGE_FRONTEND}:${IMAGE_TAG}
                                docker push ${IMAGE_FRONTEND}:latest
                            """
                        }
                    }
                }
            }
        }

        stage('Deploy') {
            when {
                branch 'main'
            }
            steps {
                dir('NEW') {
                    sh """
                        docker-compose pull
                        docker-compose up -d --no-build
                        docker-compose ps
                    """
                }
            }
        }
    }

    post {
        success {
            echo "Build ${IMAGE_TAG} deployed successfully."
        }
        failure {
            echo "Build failed. Check logs."
        }
        always {
            sh 'docker system prune -f --filter "until=24h" || true'
        }
    }
}
