package main

import (
	"encoding/base64"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
)

func main() {
	// 从命令行参数获取文件夹路径
	if len(os.Args) < 2 {
		fmt.Println("请提供要处理的文件夹路径")
		return
	}
	folderPath := os.Args[1]

	// 检查文件夹是否存在
	_, err := os.Stat(folderPath)
	if os.IsNotExist(err) {
		fmt.Println("指定的文件夹路径不存在")
		return
	}

	// 获取上级目录路径
	parentFolderPath := filepath.Dir(folderPath)

	// 获取原始文件夹名称
	base64FolderName := filepath.Base(folderPath) + "_base64"

	// 创建保存 base64 文件的文件夹
	base64FolderPath := filepath.Join(parentFolderPath, base64FolderName)
	err = os.Mkdir(base64FolderPath, 0755)
	if err != nil {
		fmt.Println("无法创建 base64 文件夹:", err)
		return
	}

	// 遍历文件夹
	err = filepath.Walk(folderPath, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		// 检查是否是文件
		if !info.IsDir() {
			// 读取文件内容
			fileData, err := ioutil.ReadFile(path)
			if err != nil {
				return err
			}

			// 转换为 base64
			base64Str := base64.StdEncoding.EncodeToString(fileData)

			// 获取原始文件名并生成 base64 文件路径
			fileName := filepath.Base(path)
			base64FilePath := filepath.Join(base64FolderPath, fmt.Sprintf("%s.txt", fileName))

			// 创建并写入到 base64 文件中
			err = ioutil.WriteFile(base64FilePath, []byte(base64Str), 0644)
			if err != nil {
				return err
			}
			fmt.Printf("文件 %s 转换成功并保存到 %s\n", path, base64FilePath)
		}
		return nil
	})

	if err != nil {
		fmt.Println("出现错误:", err)
	}
}