package testutils

import (
	"context"

	"sigs.k8s.io/controller-runtime/pkg/client"
	"sigs.k8s.io/controller-runtime/pkg/client/fake"
)

// mockCluster mocks a k8s cluster for testing.
type mockCluster struct {
	client.Client
}

func newMockCluster(cfg *ClusterConfig) (*mockCluster, error) {
	poolsCM, err := parsePoolsConfig(cfg)
	if err != nil {
		return nil, err
	}
	cli := fake.NewClientBuilder().WithObjects(parseWorkerConfig(cfg), poolsCM).Build()
	return &mockCluster{Client: cli}, nil
}

func (m *mockCluster) updateCluster(ctx context.Context, cfg *ClusterConfig) error {
	poolsCfg, err := parsePoolsConfig(cfg)
	if err != nil {
		return err
	}
	if err := m.Update(ctx, poolsCfg); err != nil {
		return err
	}
	if err := m.Update(ctx, parseWorkerConfig(cfg)); err != nil {
		return err
	}
	return nil
}
