package remote

import (
	"bytes"
	"io"
	"xg_auto_deploy/internal/global"
	"xg_auto_deploy/internal/models"

	"github.com/pkg/sftp"
	"golang.org/x/crypto/ssh"
)

func DownloadFileBuffer(nodeConfig *models.ServerNodeConfig, targetFile string) *bytes.Buffer {
	// 1. 建立 ssh client

	client, err := ssh.Dial("tcp", nodeConfig.IpPort, nodeConfig.SSHClient)
	if err != nil {
		global.Logs.Fatal("DownloadFailed to dial: ", err)
	}
	defer client.Close()

	// 2. 基于ssh client, 创建 sftp 客户端
	sftpClient, err := sftp.NewClient(client)
	if err != nil {
		global.Logs.Fatal("Download Failed to init sftp client: ", err)
	}
	defer sftpClient.Close()

	// 3. 打开远程服务器文件
	//filename := time.Now().Format("2006-01-02") + ".global.Log"
	source, err := sftpClient.Open(targetFile)
	if err != nil {
		global.Logs.Fatal("Download Failed to open remote file: ", err)
	}
	defer source.Close()

	// 读取文件内容到内存
	buf := new(bytes.Buffer)
	_, err = io.Copy(buf, source)
	if err != nil {
		global.Logs.Fatal("Download Failed to read file: ", err)
	}
	//fmt.Println("buf: ", buf)
	return buf
}