// Package cmd...
//
// Description : cmd...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2021-11-12 2:21 下午
package cmd

import (
	"os/exec"
	"strings"

	"git.zhangdeman.cn/zhangdeman/gopkg/util"
)

// Execute 执行指令
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2:22 下午 2021/11/12
func Execute(cmdConfig Config) *Result {
	if len(cmdConfig.WorkDir) == 0 {
		cmdConfig.WorkDir, _ = util.GetProjectPath()
	}
	paramList := buildCmdParameter(cmdConfig.Script, cmdConfig.ParameterList)
	cmdInstance := exec.Command(cmdConfig.Command, paramList...)
	// 设置指令的工作目录
	cmdInstance.Dir = cmdConfig.WorkDir
	result := &Result{
		Err:            nil,
		Output:         nil,
		WorkDir:        cmdConfig.WorkDir,
		ExecuteCommand: cmdConfig.Command + " " + strings.Join(paramList, " "),
	}
	result.Output, result.Err = cmdInstance.CombinedOutput()
	return result
}

// buildCmdParameter 构建参数列表
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2:53 下午 2021/11/12
func buildCmdParameter(script string, parameterList []Parameter) []string {
	paramList := make([]string, 0)
	if len(script) > 0 {
		paramList = append(paramList, script)
	}
	for _, item := range parameterList {
		if len(item.Key) == 0 {
			paramList = append(paramList, item.Value)
			continue
		}
		paramList = append(paramList, item.Key+"="+item.Value)
	}
	return paramList
}