package versionctx

import (
	"context"
	tablerelation "github.com/openimsdk/open-im-server/v3/pkg/common/storage/model"
	"sync"
)

type Collection struct {
	Name string
	Doc  *tablerelation.VersionLog
}

type versionKey struct{}

func WithVersionLog(ctx context.Context) context.Context {
	return context.WithValue(ctx, versionKey{}, &VersionLog{})
}

func GetVersionLog(ctx context.Context) *VersionLog {
	if v, ok := ctx.Value(versionKey{}).(*VersionLog); ok {
		return v
	}
	return nil
}

type VersionLog struct {
	lock sync.Mutex
	data []Collection
}

func (v *VersionLog) Append(data ...Collection) {
	if v == nil || len(data) == 0 {
		return
	}
	v.lock.Lock()
	defer v.lock.Unlock()
	v.data = append(v.data, data...)
}

func (v *VersionLog) Get() []Collection {
	if v == nil {
		return nil
	}
	v.lock.Lock()
	defer v.lock.Unlock()
	return v.data
}