package main

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

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)

	// 获取原始文件夹名称并创建保存图片的文件夹
	imageFolderName := filepath.Base(folderPath) + "_image"
	imageFolderPath := filepath.Join(parentFolderPath, imageFolderName)
	err = os.Mkdir(imageFolderPath, 0755)
	if err != nil {
		fmt.Println("无法创建图片文件夹:", err)
		return
	}

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

		// 检查是否是文件
		if !info.IsDir() {
			// 检查文件是否以 .txt 结尾
			if strings.HasSuffix(strings.ToLower(info.Name()), ".txt") {
				// 读取 base64 文件内容
				base64Data, err := ioutil.ReadFile(path)
				if err != nil {
					return err
				}

				// 解码 base64 字符串为图片数据
				imageData, err := base64.StdEncoding.DecodeString(string(base64Data))
				if err != nil {
					return err
				}

				// 生成图片文件名(去掉 .txt 后缀)
				imageFileName := strings.TrimSuffix(info.Name(), ".txt")
				imageFilePath := filepath.Join(imageFolderPath, imageFileName)

				// 创建图片文件并写入解码后的数据
				err = ioutil.WriteFile(imageFilePath, imageData, 0644)
				if err != nil {
					return err
				}
				fmt.Printf("文件 %s 转换成功并保存为图片 %s\n", path, imageFilePath)
			}
		}
		return nil
	})

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