package sqlAsyncMgr

import (
	"sync"
)

// SqlAsyncListModel 待同步sql列表模型对象
type SqlAsyncListModel struct {
	// 锁对象
	m sync.Mutex

	// 待同步的sql对象
	sqlData []*SqlAsyncItemModel
}

// newSqlAsyncListModel  创建新SqlAsyncListModel对象
func newSqlAsyncListModel() *SqlAsyncListModel {
	return &SqlAsyncListModel{
		sqlData: make([]*SqlAsyncItemModel, 0, 4),
	}
}

// SqlCount 待同步的sql数量
func (this *SqlAsyncListModel) SqlCount() int32 {
	this.m.Lock()
	defer this.m.Unlock()

	return int32(len(this.sqlData))
}

// Add 添加同步sql
func (this *SqlAsyncListModel) Add(newSqlModel *SqlAsyncItemModel) {
	this.m.Lock()
	defer this.m.Unlock()

	this.sqlData = append(this.sqlData, newSqlModel)
}

// GetItem 获取同步对象
func (this *SqlAsyncListModel) GetItem() (*SqlAsyncItemModel, bool) {
	this.m.Lock()
	defer this.m.Unlock()

	if len(this.sqlData) > 0 {
		return this.sqlData[0], true
	}

	return nil, false
}

// RemoveFirst 移除首位元素
func (this *SqlAsyncListModel) RemoveFirst() {
	this.m.Lock()
	defer this.m.Unlock()

	if len(this.sqlData) == 0 {
		return
	}

	this.sqlData = this.sqlData[1:]
}

// GetAllSqlModel 获取所有的sql
func (this *SqlAsyncListModel) GetAllSqlModel() []*SqlAsyncItemModel {
	this.m.Lock()
	defer this.m.Unlock()

	if len(this.sqlData) == 0 {
		return nil
	}

	r := this.sqlData[0:]

	return r
}
