pipeline {
    agent any

    environment {
        APP_NAME        = "pablotj-portfolio-web"
        IMAGE_NAME      = "${APP_NAME}"
        REGISTRY_URL    = "registry.pablotj.com"
        NAMESPACE       = "andromeda"
        USER            = "andromeda"
        PASS            = credentials('docker-registry-password')
        TAG             = "latest"
        HOST_PORT       = "8080"
        CONTAINER_PORT  = "3000"
        IMAGE_FULL      = "${REGISTRY_URL}/${NAMESPACE}/${IMAGE_NAME}:${TAG}"
    }

    stages {
        stage('Prepare Workspace & Checkout') {
            steps {
                echo "Cleaning workspace"
                deleteDir()
            }
        }


        stage('Checkout') {
            steps {
                echo "Checking out repo..."
                checkout scm
            }
        }

        stage('Load Environment') {
            steps {
                echo "Loading .env secret from Jenkins..."
                withCredentials([file(credentialsId: 'pablotj-portfolio-website-env', variable: 'SECRET_ENV')]) {
                    sh 'cp $SECRET_ENV .env'
                }
            }
        }

        stage('Build Docker Image') {
            steps {
                echo "Building Docker image..."
                sh '''
                    docker build -t ${IMAGE_NAME}:${TAG} .
                '''
            }
        }

        stage('Tag & Push Docker Image') {
            steps {
                echo "Tagging and pushing Docker image to registry..."
                sh '''
                    docker tag ${IMAGE_NAME}:${TAG} ${IMAGE_FULL}
                    echo $PASS | docker login ${REGISTRY_URL} -u ${USER} --password-stdin
                    docker push ${IMAGE_FULL}
                '''
            }
        }

        stage('Deploy Docker Container') {
            steps {
                echo "Stopping old container and running new container..."
                sh '''
                    docker stop ${APP_NAME} || true
                    docker rm ${APP_NAME} || true
                    docker run -d \
                        --name ${APP_NAME} \
                        -p ${HOST_PORT}:${CONTAINER_PORT} \
                        --env-file .env \
                        ${IMAGE_FULL}
                '''
            }
        }
    }

    post {
        success {
            echo "✅ Deployment completed successfully!"
        }
        failure {
            echo "❌ Pipeline failed!"
        }
    }
}