package file

import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"

	"be.ems/src/framework/logger"
)

// WriterFileJSON 写入JSON文件
func WriterFileJSON(data any, filePath string) error {
	// 获取文件所在的目录路径
	dirPath := filepath.Dir(filePath)

	// 确保文件夹路径存在
	err := os.MkdirAll(dirPath, 0775)
	if err != nil {
		logger.Errorf("CreateFile MkdirAll %v", err)
	}

	// 创建或打开文件
	file, err := os.Create(filePath)
	if err != nil {
		return err
	}
	defer file.Close()

	// 创建 JSON 编码器
	encoder := json.NewEncoder(file)

	// 将数据编码并写入文件
	err = encoder.Encode(data)
	if err != nil {
		return err
	}

	return nil
}

// WriterFileJSONLine 写入JSON文件用 一行一个JSON
func WriterFileJSONLine(data []any, filePath string) error {
	// 获取文件所在的目录路径
	dirPath := filepath.Dir(filePath)

	// 确保文件夹路径存在
	err := os.MkdirAll(dirPath, 0775)
	if err != nil {
		logger.Errorf("CreateFile MkdirAll %v", err)
	}

	// 创建或打开文件
	file, err := os.Create(filePath)
	if err != nil {
		return err
	}
	defer file.Close()

	// 创建一个 Writer 对象，用于将数据写入文件
	writer := bufio.NewWriter(file)
	for _, row := range data {
		jsonData, err := json.Marshal(row)
		if err != nil {
			return err
		}

		// 写入 JSON 字符串到文件，并换行
		fmt.Fprintln(writer, string(jsonData))
	}

	// 将缓冲区中的数据刷新到文件中
	err = writer.Flush()
	if err != nil {
		logger.Errorf("CreateFile Flush %v", err)
		return err
	}
	return nil
}

// ReadFileJSONLine 读取行JSON文件 一行一个JSON
func ReadFileJSONLine(filePath string) []string {
	// 创建 map 存储数据
	arr := make([]string, 0)

	// 打开文本文件
	file, err := os.Open(filePath)
	if err != nil {
		logger.Errorf("OpenFile Open %v", err)
		return arr
	}
	defer file.Close()

	// 创建一个 Scanner 对象，用于逐行读取文件内容
	scanner := bufio.NewScanner(file)
	if scanner.Err() != nil {
		logger.Errorf("OpenFile NewScanner %v", scanner.Err())
		return arr
	}

	for scanner.Scan() {
		line := scanner.Text()
		arr = append(arr, line)
	}

	return arr
}
