@Library('homelab') _

import vn.fireflylab.pipeline.BranchStrategy

// ── Stage functions ────────────────────────────────────────────────
def executeInstallTest() {
    stage('Install & Test') {
        container('node') { runNodeTest() }
    }
}

def executeBuildPush() {
    stage('Build & Push') {
        container('docker') {
            def tag = BranchStrategy.imageTag(env.BRANCH_NAME)
            env.IMAGE_TAG = tag
            dockerBuildPush(appName: 'tictactoe', tag: tag)
        }
    }
}

def executeScanCodeQuality() {
    stage('Scan Code Quality') {
        container('node') {
            scanCodeQuality(projectKey: 'tictactoe')
        }
    }
}

def executeBumpChart() {
    stage('Bump Helm Chart') {
        container('tools') {
            bumpHelmChart(imageTag: env.IMAGE_TAG)
            gitCommitPush(
                files: ['manifest/helm/Chart.yaml', 'manifest/helm/values.yaml'],
                message: "ci: bump tictactoe chart to ${env.IMAGE_TAG}"
            )
        }
    }
}

// ── Pipeline ───────────────────────────────────────────────────────
podTemplate(yaml: homelabK8sAgent(withTools: true)) {
    node(POD_LABEL) {
        withEnv(['DOCKER_HOST=tcp://localhost:2375']) {
            checkout scm

            BranchStrategy.prStrategy(env.BRANCH_NAME) {
                executeInstallTest()
            }

            BranchStrategy.featureStrategy(env.BRANCH_NAME) {
                executeInstallTest()
                executeScanCodeQuality()
                executeBuildPush()
            }

            BranchStrategy.developStrategy(env.BRANCH_NAME) {
                executeInstallTest()
                executeScanCodeQuality()
                executeBuildPush()
            }

            BranchStrategy.mainStrategy(env.BRANCH_NAME) {
                executeInstallTest()
                executeScanCodeQuality()
                executeBuildPush()
            }

            BranchStrategy.releaseStrategy(env.BRANCH_NAME) {
                executeInstallTest()
                executeScanCodeQuality()
                executeBuildPush()
            }

            BranchStrategy.hotfixStrategy(env.BRANCH_NAME) {
                executeInstallTest()
                executeScanCodeQuality()
                executeBuildPush()
            }
        }
    }
}
