package auto

import (
	"xg_auto_deploy/internal/global"
	"xg_auto_deploy/internal/models"
	"xg_auto_deploy/internal/remote"
)

func CheckSysEnv(nodeTemp *models.ServerNodeConfig) {
	send := func(cmd string, flag *string) {
		_, err := remote.SingleCmd(nodeTemp, cmd)
		if err != nil {
			*flag = "未设置"
		}
		*flag = "已配置"
	}
	send(`grep "net.core.wmem_default = 2097152" /etc/sysctl.conf`, &nodeTemp.CoreWmemDefault)
	send(`grep "net.core.rmem_default = 2097152" /etc/sysctl.conf`, &nodeTemp.CoreRmemDefault)
	send(`grep "net.core.rmem_max = 8388608" /etc/sysctl.conf`, &nodeTemp.CoreRmemMax)
	send(`grep "net.core.wmem_max = 8388608" /etc/sysctl.conf`, &nodeTemp.CoreWmemMax)
	send(`grep "ulimit -s 20480" /etc/profile`, &nodeTemp.OsOpenFiles)
	send(`grep "ulimit -n 10240" /etc/profile`, &nodeTemp.OsStackSize)
}

func modifySysEnv(nodeTemp *models.ServerNodeConfig, cmd string) {
	send := func(cmd string) {
		_, err := remote.SingleCmd(nodeTemp, cmd)
		if err != nil {

		}
	}
	send(`echo "net.core.wmem_default = 2097152" | sudo tee -a /etc/sysctl.conf`)
	send(`echo "net.core.rmem_default = 2097152" | sudo tee -a /etc/sysctl.conf`)
	send(`echo "net.core.rmem_max = 8388608" | sudo tee -a /etc/sysctl.conf`)
	send(`echo "net.core.wmem_max = 8388608" | sudo tee -a /etc/sysctl.conf`)
	send(`echo "ulimit -s 20480" | sudo tee -a /etc/profile`)
	send(`echo "ulimit -n 10240" | sudo tee -a /etc/profile`)
	send("sysctl -p /etc/sysctl.conf")
	send("source /etc/profile")
}

func CheckAppEnv(nodeTemp *models.ServerNodeConfig) {
	_, err := remote.SingleCmd(nodeTemp, "gcc --version")
	if err != nil {
		nodeTemp.AppInfo.Gcc = "不存在"
		global.Logs.Warnf("%s: gcc未安装", nodeTemp.NodeId)
	} else {
		nodeTemp.Gcc = "gcc已安装"
	}

	_, err = remote.SingleCmd(nodeTemp, "rpm -q libaio")
	if err != nil {
		nodeTemp.AppInfo.Libaio = "不存在"
		global.Logs.Warnf("%s: libaio未安装", nodeTemp.NodeId)

	} else {
		nodeTemp.Libaio = "libaio已安装"
	}
	_, err = remote.SingleCmd(nodeTemp, "snmpd -v")
	if err != nil {
		nodeTemp.AppInfo.Snmpd = "不存在"
		global.Logs.Warnf("%s节点:snmpd未安装", nodeTemp.NodeId)
	} else {
		nodeTemp.Snmpd = "snmpd已安装"
	}
	_, err = remote.SingleCmd(nodeTemp, "ntpd --version")
	if err != nil {
		nodeTemp.AppInfo.Ntpd = "不存在"
		global.Logs.Warnf("%s节点: ntpd未安装", nodeTemp.NodeId)
	} else {
		nodeTemp.Ntpd = "ntpd已安装"
	}
}