// Code generated by godddx, DO AVOID EDIT.
package uniqueid

// Storer data persistence
type Storer interface {
	UniqueID() UniqueIDStorer
}

// Core business domain
type Core struct {
	store  Storer
	m      *IDManager
	length int
}

// NewCore create business domain
func NewCore(store Storer, length int) Core {
	return Core{
		store:  store,
		length: length,
		m:      NewIDManager(store.UniqueID()),
	}
}

// UniqueID 获取全局唯一 ID
// 当创建的 id 并未使用，或允许下次再次使用，请执行 UndoUniqueID
func (c Core) UniqueID(prefix string) string {
	return c.m.UniqueID(prefix, c.length)
}

// UniqueIDByCustomLen 获取自定义长度的全局 id
func (c Core) UniqueIDWithCustomLen(prefix string, length int) string {
	return c.m.UniqueID(prefix, length)
}

// UndoUniqueID 撤销唯一 id，如果 UniqueID 获取的某个 id 并未使用，或者随着数据源的删除可以调用此函数撤销
func (c Core) UndoUniqueID(id string) error {
	return c.m.UndoUniqueID(id)
}
