package service

import (
	"github.com/leanote/leanote/app/info"
	"github.com/leanote/leanote/app/db"
//	. "github.com/leanote/leanote/app/lea"
	"gopkg.in/mgo.v2/bson"
//	"time"
)

// 历史记录
type NoteContentHistoryService struct {
}

// 每个历史记录最大值
var maxSize = 10

// 新建一个note, 不需要添加历史记录
// 添加历史
func (this *NoteContentHistoryService) AddHistory(noteId, userId string, eachHistory info.EachHistory) {
	// 检查是否是空
	if eachHistory.Content == "" {
		return
	}
	
	// 先查是否存在历史记录, 没有则添加之
	history := info.NoteContentHistory{}
	db.GetByIdAndUserId(db.NoteContentHistories, noteId, userId, &history)
	if history.NoteId == "" {
		this.newHistory(noteId, userId, eachHistory)
	} else {
		// 判断是否超出 maxSize, 如果超出则pop最后一个, 再push之, 不用那么麻烦, 直接update吧, 虽然影响性能
		// TODO
		l := len(history.Histories)
		if l >= maxSize {
			// history.Histories = history.Histories[l-maxSize:] // BUG, 致使都是以前的
			history.Histories = history.Histories[:maxSize]
		}
		newHistory := []info.EachHistory{eachHistory}
		newHistory = append(newHistory, history.Histories...) // 在开头加了, 最近的在最前
	  	history.Histories = newHistory 
		
		// 更新之
		db.UpdateByIdAndUserId(db.NoteContentHistories, noteId, userId, history)
	}
	return
}

// 新建历史
func (this *NoteContentHistoryService) newHistory(noteId, userId string, eachHistory info.EachHistory) {
	history := info.NoteContentHistory{NoteId: bson.ObjectIdHex(noteId), 
		UserId: bson.ObjectIdHex(userId), 
		Histories: []info.EachHistory{eachHistory},
	}
	
	// 保存之
	db.Insert(db.NoteContentHistories, history) 
}

// 列表展示
func (this *NoteContentHistoryService) ListHistories(noteId, userId string) []info.EachHistory {
	histories := info.NoteContentHistory{}
	db.GetByIdAndUserId(db.NoteContentHistories, noteId, userId, &histories)
	return histories.Histories
}