package main

import (
	"context"
	"testing"

	pb "github.com/tidbcloud/config-center/proto/config_center"
	"google.golang.org/grpc"
)

type fakeBRParamDictClient struct {
	pb.ConfigCenterServiceClient
	listRequests        []*pb.ListConfigurationDictItemsRequest
	batchCreateRequests []*pb.BatchCreateConfigurationDictRequest
}

func (f *fakeBRParamDictClient) ListConfigurationDictItems(_ context.Context, req *pb.ListConfigurationDictItemsRequest, _ ...grpc.CallOption) (*pb.ListConfigurationDictItemsResponse, error) {
	f.listRequests = append(f.listRequests, req)
	return &pb.ListConfigurationDictItemsResponse{}, nil
}

func (f *fakeBRParamDictClient) BatchCreateConfigurationDictItems(_ context.Context, req *pb.BatchCreateConfigurationDictRequest, _ ...grpc.CallOption) (*pb.BatchCreateConfigurationDictResponse, error) {
	f.batchCreateRequests = append(f.batchCreateRequests, req)
	return &pb.BatchCreateConfigurationDictResponse{}, nil
}

func TestImportNextGenBRParamDictsUsesMajorMinorVersion(t *testing.T) {
	client := &fakeBRParamDictClient{}

	if err := importNextGenBRParamDicts(client, "v26.3.99"); err != nil {
		t.Fatalf("importNextGenBRParamDicts returned error: %v", err)
	}

	if len(client.listRequests) != len(brConfigTypes) {
		t.Fatalf("expected %d list requests, got %d", len(brConfigTypes), len(client.listRequests))
	}
	for _, req := range client.listRequests {
		if req.GetVersion() != "v26.3" {
			t.Errorf("expected list request version v26.3, got %q", req.GetVersion())
		}
	}

	if len(client.batchCreateRequests) != len(brConfigTypes) {
		t.Fatalf("expected %d batch create requests, got %d", len(brConfigTypes), len(client.batchCreateRequests))
	}
	for _, req := range client.batchCreateRequests {
		for _, item := range req.GetConfigurationDictItems() {
			if item.GetVersion() != "v26.3" {
				t.Errorf("expected created item version v26.3, got %q", item.GetVersion())
			}
		}
	}
}
