package timeslicequery

import (
	"github.com/nacos-group/nacos-sdk-go/util"
	"sync"
	"voucher/internal/biz/cmb"
	"voucher/internal/biz/mixrepos"
	"voucher/internal/biz/repo"
	"voucher/internal/biz/wechatrepo"
	"voucher/internal/conf"
	"voucher/internal/data"
)

type Query struct {
	mu       sync.RWMutex
	queryMap map[string]bool

	bc  *conf.Bootstrap
	rdb *data.Rdb
	cmb *cmb.Cmb

	productRepo  repo.ProductRepo
	orderRepo    repo.OrderRepo
	orderBakRepo repo.OrderBakRepo

	wechatCpnRepo wechatrepo.WechatCpnRepo
	mqSendMixRepo mixrepos.MQSendMixRepo
}

func NewQuery(
	bc *conf.Bootstrap,
	rdb *data.Rdb,
	cmb *cmb.Cmb,
	productRepo repo.ProductRepo,
	orderRepo repo.OrderRepo,
	orderBakRepo repo.OrderBakRepo,
	wechatCpnRepo wechatrepo.WechatCpnRepo,
	mqSendMixRepo mixrepos.MQSendMixRepo) *Query {
	return &Query{
		queryMap:      make(map[string]bool),
		bc:            bc,
		rdb:           rdb,
		cmb:           cmb,
		productRepo:   productRepo,
		orderRepo:     orderRepo,
		orderBakRepo:  orderBakRepo,
		wechatCpnRepo: wechatCpnRepo,
		mqSendMixRepo: mqSendMixRepo}
}

func (v *Query) uid(no string) string {
	return util.Md5("query" + no)
}

func (this *Query) GetAll() map[string]bool {
	return this.queryMap
}

func (this *Query) Get(uid string) bool {

	this.mu.Lock()
	defer this.mu.Unlock()

	if _, ok := this.queryMap[uid]; ok {
		return ok
	}

	return false
}

func (this *Query) Add(uid string) {

	this.mu.Lock()
	defer this.mu.Unlock()

	this.queryMap[uid] = true
}

func (this *Query) Remove(uid string) {

	this.mu.Lock()
	defer this.mu.Unlock()

	if _, ok := this.queryMap[uid]; ok {
		delete(this.queryMap, uid)
	}
}
