@Library('homelab') _

import vn.fireflylab.pipeline.BranchStrategy

// ── Stage functions ────────────────────────────────────────────────
def executeInstall() {
    stage('Install') {
        container('node') { runNodeInstall() }
    }
}

def executeUnitTest() {
    stage('Unit Test') {
        container('node') { runNodeTest(testCmd: 'run test:coverage') }
    }
}

def executeScanCodeQuality() {
    stage('Scan Code Quality') {
        container('sonar') {
            scanCodeQuality(projectKey: 'tcb_devportal')
        }
    }
}

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

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 tcb_devportal chart to ${env.IMAGE_TAG}"
            )
        }
    }
}

// ── Pipeline ───────────────────────────────────────────────────────
// PR-*          → install + test
// feature/*     → install + test + scan + build + push
// develop       → install + test + scan + build + push
// main          → install + test + scan + build + push
// release/x.y.z → install + test + scan + build + push
// hotfix/*      → install + test + scan + build + push

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

            BranchStrategy.prStrategy(env.BRANCH_NAME) {
                executeInstall()
                executeUnitTest()
            }

            BranchStrategy.featureStrategy(env.BRANCH_NAME) {
                executeInstall()
                executeUnitTest()
                executeScanCodeQuality()
                executeBuildPush()
            }

            BranchStrategy.developStrategy(env.BRANCH_NAME) {
                executeInstall()
                executeUnitTest()
                executeScanCodeQuality()
                executeBuildPush()
            }

            BranchStrategy.mainStrategy(env.BRANCH_NAME) {
                executeInstall()
                executeUnitTest()
                executeScanCodeQuality()
                executeBuildPush()
            }

            BranchStrategy.releaseStrategy(env.BRANCH_NAME) {
                executeInstall()
                executeUnitTest()
                executeScanCodeQuality()
                executeBuildPush()
            }

            BranchStrategy.hotfixStrategy(env.BRANCH_NAME) {
                executeInstall()
                executeUnitTest()
                executeScanCodeQuality()
                executeBuildPush()
            }
        }
    }
}
