pipeline {
    agent any

    environment {
        REGISTRY_URL = 'git.winteraccess.id'
        IMAGE_NAME = 'winter-access/backend_nam'
        KUBE_CONFIG_ID = '8c2082d8-ab78-48b5-a27b-6717387a5ce6'
        CREDENTIALS_ID = '8242519c-ed9e-447a-ad63-1f8d7368cf68'
    }

    stages {
        stage('Checkout Code') {
            steps {
                git branch: 'dev', url: 'https://git.winteraccess.id/winter-access/backend_nam.git', credentialsId: "${CREDENTIALS_ID}"
            }
        }

        stage('Build Docker Image') {
            steps {
                script {
                    def shortSha = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
                    def imageTag = "dev-${shortSha}"
                    sh "docker build -t ${REGISTRY_URL}/${IMAGE_NAME}:${imageTag} ."
                }
            }
        }

        stage('Push Docker Image') {
            steps {
                script {
                    def shortSha = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
                    def imageTag = "dev-${shortSha}"
                    sh "docker push ${REGISTRY_URL}/${IMAGE_NAME}:${imageTag}"
                    sh "docker push ${REGISTRY_URL}/${IMAGE_NAME}:dev"
                    sh "docker push ${REGISTRY_URL}/${IMAGE_NAME}:latest"
                }
            }
        }

        stage('Deploy to Kubernetes') {
            steps {
                script {
                    withCredentials([string(credentialsId: "${KUBE_CONFIG_ID}", variable: 'KUBE_CONFIG')]) {
                        writeFile file: 'kubeconfig', text: KUBE_CONFIG
                        sh "kubectl apply -f deploy/kubernetes/dev.yaml --kubeconfig=kubeconfig"
                    }
                }
            }
        }
    }

    post {
        always {
            cleanWs()
        }
    }
}