package queue

import (
	"sync"
	"time"
)

// buffered golang chan members release
type Clear struct {
	flag bool
	lock sync.RWMutex
}

// Clean() begin and wait for remaining chan members were released
func (i *Clear) Clean(queue chan interface{}) {
	i.set(true)

	for {
		if len(queue) == 0 {
			i.set(false)
			break
		}
		time.Sleep(1 * time.Millisecond) // set a little gap between every loop and between Clean() and clear.Working() off
	}
}

// set() set the Clear working flag
func (i *Clear) set(val bool) {
	i.lock.Lock()
	defer i.lock.Unlock()

	i.flag = val
}

// Working() return whether the Clear is working
func (i *Clear) Working() bool {
	i.lock.RLock()
	defer i.lock.RUnlock()

	return i.flag
}