package strategy

import (
	"errors"
)

type ReplicationStrategy struct {
	replicas   int32
	clusterIds []string
}

func NewReplicationStrategy(clusterIds []string, replicas int32) *ReplicationStrategy {
	return &ReplicationStrategy{clusterIds: clusterIds,
		replicas: replicas,
	}
}

func (r *ReplicationStrategy) Schedule() ([]*AssignedCluster, error) {
	if r.replicas < 1 {
		return nil, errors.New("replicas must be greater than 0")
	}

	if len(r.clusterIds) == 0 {
		return nil, errors.New("clusterIds must be set")
	}

	var results []*AssignedCluster
	for _, c := range r.clusterIds {
		cluster := &AssignedCluster{ClusterId: c, Replicas: r.replicas}
		results = append(results, cluster)
	}
	return results, nil
}
