package stargate

import (
	"sync"

	"github.com/pingcap/wormhole/pkg/util"
	"github.com/pingcap/wormhole/pkg/whpb"
)

type status struct {
	sync.Mutex
	positions map[string]*whpb.Position
}

func newStatus() *status {
	return &status{
		positions: make(map[string]*whpb.Position),
	}
}

func (s *status) report(key string, pos *whpb.Position) {
	s.Lock()
	defer s.Unlock()

	s.positions[key] = pos
}

func (s *status) statistics() *whpb.Position {
	s.Lock()
	var pos *whpb.Position
	for _, p := range s.positions {
		if pos == nil {
			pos = p
		}
		res := util.CompareBinlogPosition(pos, p)
		if res > 1 {
			pos = p
		}
	}
	s.Unlock()
	if pos == nil {
		return nil
	}
	return pos
}
