package interceptor

import (
	"os"
	"runtime"
	"strings"
)

// ProcessModule 提供对进程信息和环境变量的访问
type ProcessModule struct{}

// GetEnv 获取环境变量
func (p *ProcessModule) GetEnv(key string) string {
	return os.Getenv(key)
}

// SetEnv 设置环境变量
func (p *ProcessModule) SetEnv(key, value string) error {
	return os.Setenv(key, value)
}

// GetAllEnv 获取所有环境变量
func (p *ProcessModule) GetAllEnv() map[string]string {
	envMap := make(map[string]string)
	for _, env := range os.Environ() {
		pair := strings.SplitN(env, "=", 2)
		if len(pair) == 2 {
			envMap[pair[0]] = pair[1]
		}
	}
	return envMap
}

// GetPid 获取当前进程ID
func (p *ProcessModule) GetPid() int {
	return os.Getpid()
}

// GetPpid 获取父进程ID
func (p *ProcessModule) GetPpid() int {
	return os.Getppid()
}

// GetHostname 获取主机名
func (p *ProcessModule) GetHostname() (string, error) {
	return os.Hostname()
}

// GetOS 获取操作系统类型
func (p *ProcessModule) GetOS() string {
	return runtime.GOOS
}

// GetArch 获取系统架构
func (p *ProcessModule) GetArch() string {
	return runtime.GOARCH
}

// GetCwd 获取当前工作目录
func (p *ProcessModule) GetCwd() (string, error) {
	return os.Getwd()
}

// Chdir 改变当前工作目录
func (p *ProcessModule) Chdir(dir string) error {
	return os.Chdir(dir)
}

// GetArgs 获取命令行参数
func (p *ProcessModule) GetArgs() []string {
	return os.Args
}

// Exit 退出程序
func (p *ProcessModule) Exit(code int) {
	os.Exit(code)
}
