package config

import (
	"encoding/json"
	"fmt"
	"github.com/eclipse/paho.golang/paho"
	"os"
)

// Cache MQTT消息缓存
type Cache string

// Get 读取缓存数据
func (s Cache) Get() (*paho.Publish, error) {
	// 判断文件是否存在
	if _, err := os.Stat(string(s)); os.IsNotExist(err) {
		return nil, fmt.Errorf("文件不存在: %s", err)
	}
	// 读取文件内容
	file, err := os.ReadFile(string(s))
	if err != nil {
		return nil, fmt.Errorf("读取文件失败: %w", err)
	}

	// 解析数据
	data := &paho.Publish{}
	err = json.Unmarshal(file, data)
	if err != nil {
		return nil, fmt.Errorf("解析数据失败: %w", err)
	}

	return data, nil
}

// Set 设置缓存数据
func (s Cache) Set(data *paho.Publish) error {
	if s == "" {
		return fmt.Errorf("缓存路径不能为空")
	}
	if data == nil {
		return nil
	}

	// 创建文件
	file, err := os.Create(string(s))
	if err != nil {
		return fmt.Errorf("创建文件失败: %w", err)
	}
	defer file.Close()

	// 序列化数据
	dataBytes, err := json.Marshal(data)
	if err != nil {
		return fmt.Errorf("序列化数据失败: %w", err)
	}

	// 写入数据
	_, err = file.Write(dataBytes)
	if err != nil {
		return fmt.Errorf("写入数据失败: %w", err)
	}
	return nil
}
