package jsonConfig

import (
	"encoding/json"

	"github.com/gin-gonic/gin"
)

type JsonConfiger interface {
	GetImportData() error
	// ExportFile()
}

type ConfigModel struct {
	AppName            string      `json:"AppName"`
	Ability            string      `json:"Ability"`
	Version            string      `json:"Version"`
	AbilityVersion     string      `json:"AbilityVersion"`
	AppAllowLowVersion string      `json:"AppAllowLowVersion"`
	Data               interface{} `json:"Data"`
}

var expoprtSuffix = ".lcn.json"

const (
	ABILITY_MODE_EVENT_STYLE = "EventStyle" // 时间风格
	ABILITY_MODE_SPECIAL_DAY = "SpecialDay" // 特殊的日期
)

// 生成输出文件
func BuildExportFile(cfgModel *ConfigModel) ([]byte, error) {
	content, err := json.Marshal(cfgModel)
	return content, err
}

func Write(ctx *gin.Context, fileName string, content []byte) {
	ctx.Writer.Header().Add("Content-Type", "application/octet-stream")
	ctx.Writer.Header().Add("Content-disposition", "attachment;filename="+fileName+expoprtSuffix)
	ctx.Writer.Header().Add("Content-Transfer-Encoding", "binary")
	ctx.Writer.Write(content)
}

func GetImportData(JsonConfiger) {

}

func NewConfigModel(ability, abilityVersion string) *ConfigModel {
	return &ConfigModel{
		AppName:            "Li-Calendar",
		Version:            "1",
		AppAllowLowVersion: "1",
		Ability:            ability,
		AbilityVersion:     abilityVersion,
	}
}

// 验证配置模型数据是否相同
func ConfigModelCheck(data *ConfigModel, ability, abilityVersion string) bool {
	newData := NewConfigModel(ability, abilityVersion)
	if *data != *newData {
		return false
	}
	return true
}

// func InportConfigFile(f multipart.FileHeader, eventStyle EventStyleModel) (EventStyleModel, error) {

// src, err := f.Open()
// defer src.Close()
// if err != nil {
// 	return err
// }

// contentByte, err := ioutil.ReadAll(src)
// if err != nil {
// 	return err
// }
// configFile := ConfigModel{}
// if err := json.Unmarshal(contentByte, &configFile); err != nil {
// 	return err
// }
// v, ok := configFile.Data.(EventStyleModel)
// return errors.New("格式")
// if !ok {
// 	return errors.New("格式错误")
// }

// if err := json.Unmarshal(contentByte, &configFile); err != nil {
// 	return err
// }

// fileExt := strings.ToLower(path.Ext(f.Filename))
// fileName := cmn.Md5(fmt.Sprintf("%s%s", f.Filename, time.Now().String()))
// fildDir := fmt.Sprintf("%s/%d/%d/%d/", configUpload, time.Now().Year(), time.Now().Month(), time.Now().Day())
// isExist, _ := cmn.PathExists(fildDir)
// if !isExist {
// 	os.MkdirAll(fildDir, os.ModePerm)
// }
// filepath := fmt.Sprintf("%s%s%s", fildDir, fileName, fileExt)

// }