package ipns

import "time"

type Republisher struct {
	TimeoutLong  time.Duration
	TimeoutShort time.Duration
	Publish      chan struct{}
	node         *Node
}

func NewRepublisher(n *Node, tshort, tlong time.Duration) *Republisher {
	return &Republisher{
		TimeoutShort: tshort,
		TimeoutLong:  tlong,
		Publish:      make(chan struct{}),
		node:         n,
	}
}

func (np *Republisher) Run() {
	for _ = range np.Publish {
		quick := time.After(np.TimeoutShort)
		longer := time.After(np.TimeoutLong)

	wait:
		select {
		case <-quick:
		case <-longer:
		case <-np.Publish:
			quick = time.After(np.TimeoutShort)
			goto wait
		}

		log.Info("Publishing Changes!")
		err := np.node.republishRoot()
		if err != nil {
			log.Critical("republishRoot error: %s", err)
		}

	}
}