package pd

import (
	"encoding/json"
)

type Store struct {
	ID uint64 `json:"id"`
}

type StoreInfo struct {
	Store Store `json:"store"`
}

type StoresInfo struct {
	Count  int         `json:"count"`
	Stores []StoreInfo `json:"stores"`
}

func (s *StoreInfo) GetRegions() ([]Region, error) {
	resp, err := storeController.GetDriver().GetRegionsByStore(s.Store.ID)
	if err != nil {
		return nil, err
	}
	var regionsInfo RegionsInfo
	if err = json.Unmarshal(resp, &regionsInfo); err != nil {
		return nil, err
	}
	return regionsInfo.Regions, nil
}

func (s *StoreInfo) GetLeaders() ([]Region, error) {
	regions, err := s.GetRegions()
	if err != nil {
		return nil, err
	}
	leaders := make([]Region, 0)
	for _, r := range regions {
		if r.Leader.StoreID == s.Store.ID {
			leaders = append(leaders, r)
		}
	}
	return leaders, nil
}

func (s *StoreInfo) AddScheduler(name string) error {
	return storeController.GetDriver().AddStoreScheduler(name, s.Store.ID)
}

func (s *StoreInfo) RemoveScheduler(name string) error {
	return storeController.GetDriver().RemoveStoreScheduler(name, s.Store.ID)
}
