package remote

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"testing"
	"xg_auto_deploy/internal/models"

	"golang.org/x/crypto/ssh"
)

var GlobalServerNodeConfigTest = models.ServerNodeConfig{
	ServerNodeInfo: &models.ServerNodeInfo{
		IpPort:     "172.23.6.92:22",
		LocalFile:  `C:\Program_GT\Code\Go\Work\xg_autodeploy\file`,
		TargetFile: "/home/gtong/testf/",
		User:       "your_user",
		Password:   "your_password",
		XuguAddr:   "your_xugu_addr",
	},
	SSHInfo: &models.SSHInfo{
		SSHClient: &ssh.ClientConfig{
			User: "gtong",
			Auth: []ssh.AuthMethod{
				ssh.Password("845895"),
			},
			// 设置其他字段
			HostKeyCallback: ssh.InsecureIgnoreHostKey(), // 不验证远程主机的身份,仅用于示例,请不要在生产环境中使用
		},
	},
	AppInfo: &models.AppInfo{
		Gcc:    "your_gcc",
		Libaio: "your_libaio",
		Snmpd:  "your_snmpd",
		Ntpd:   "your_ntpd",
	},
}

func TestUploadFile(t *testing.T) {
	file, err := os.Open(`C:\Program_GT\Code\Go\Work\xg_autodeploy\file\config.toml`)
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}
	defer file.Close() // 确保在函数退出时关闭文件
	var buf bytes.Buffer

	// 将文件内容复制到 buf 中
	_, err = io.Copy(&buf, file)
	if err != nil {
		fmt.Println("Error reading file:", err)
		return
	}

	UploadFileBuffer(&GlobalServerNodeConfigTest, &buf, "/home/gtong/testf/")
}

func TestUploadFiles(t *testing.T) {
	// 连接到远程主机
	client, err := ssh.Dial("tcp", "172.23.6.92:22", GlobalServerNodeConfigTest.SSHInfo.SSHClient)
	if err != nil {
		panic(err)
	}
	defer client.Close()
	SingleCmd(&GlobalServerNodeConfigTest, fmt.Sprintf(`[ ! -d "%s" ] && mkdir -p %s`, GlobalServerNodeConfigTest.TargetFile, GlobalServerNodeConfigTest.TargetFile))

	// 递归上传文件夹内容
	if err := UploadDir(&GlobalServerNodeConfigTest, GlobalServerNodeConfigTest.LocalFile, GlobalServerNodeConfigTest.TargetFile); err != nil {
		panic(err)
	}

}