import com.sonymusic.*
import groovy.json.JsonSlurper

def call(Map args){
    def params = Utils.validateParams('packageManagerRun', args, [
        scriptNames: [type: List, itemType: String, required: true],
        nodeVersion: [type: String, required: false],
        envVars: [type: Map, required: false, defaultValue: [:]]
    ])

    // Read package.json to determine package manager
    def packageJsonContent = readFile('package.json')
    def packageManagerField = new JsonSlurper().parseText(packageJsonContent).packageManager

    // Extract package manager from packageManager field (format: "packageManager@version")
    def packageManager = 'yarn' // default to yarn
    if (packageManagerField) {
        def pmString = packageManagerField
        if (pmString.contains('@')) {
            packageManager = pmString.split('@')[0]
        } else {
            packageManager = pmString
        }
    }

    // Call the appropriate package manager step
    switch(packageManager) {
        case 'npm':
            npmRun(
                scriptNames: params.scriptNames,
                nodeVersion: params.nodeVersion,
                envVars: params.envVars
            )
            break
        case 'pnpm':
            pnpmRun(
                scriptNames: params.scriptNames,
                nodeVersion: params.nodeVersion,
                envVars: params.envVars
            )
            break
        case 'yarn':
        default:
            // Default to yarn for unsupported or unspecified package managers
            yarnRun(
                scriptNames: params.scriptNames,
                nodeVersion: params.nodeVersion,
                envVars: params.envVars
            )
            break
    }

    return null
}
