package core

import (
	"sort"
	"time"
)

//ChangeLog 一个版本的描述
type ChangeLog struct {
	Version int64
	Time    time.Time
	Logs    []string
}

//ChangeLogs 多个描述
type ChangeLogs []*ChangeLog

func (c ChangeLogs) Less(i, j int) bool {
	return c[i].Version < c[j].Version
}
func (c ChangeLogs) Len() int {
	return len(c)
}
func (c ChangeLogs) Swap(i, j int) {
	c[i], c[j] = c[j], c[i]
}

//Version 计算最大版本号
func (c ChangeLogs) Version() int64 {
	if len(c) > 0 {
		return c[0].Version
	}
	return 0

}

//Versions 存储版本
var Versions = map[string]ChangeLogs{}

//VersionModules 存贮有序的模块名称
var VersionModules = []string{}

//AddVersion 增加一个版本
func AddVersion(moduleName string, ver int64, t string, logs []string) {
	tm, err := time.Parse("2006-01-02", t)
	if err != nil {
		LOG.Panic(err)
	}
	vers, ok := Versions[moduleName]
	if !ok {
		VersionModules = append(VersionModules, moduleName)
		vers = ChangeLogs{}
	}
	vers = append(vers, &ChangeLog{ver, tm, logs})
	sort.Sort(sort.Reverse(vers))
	Versions[moduleName] = vers
}

//Version 返回总版本号
func Version() (r int64) {
	r = 0
	for _, v := range Versions {
		if len(v) > 0 {
			r += v[0].Version
		}
	}
	return
}
