package integration

import (
	"context"
	"encoding/base64"
	"os"
	"path/filepath"

	regionalpb "github.com/tidbcloud/infra-provider/api/tidbcloud/regional-server/v1"
	"github.com/tidbcloud/ticdc-service/pkg/cloud"
	"github.com/tidbcloud/ticdc-service/pkg/regionalservice/mocks"
)

type regionalClient struct {
	mocks.MockClient
}

func (c *regionalClient) GetAPPBoxByTenantIDAndClusterID(ctx context.Context, tenantID, clusterID string) (*regionalpb.APPBox, error) {
	fname, err := filepath.Abs(kubeconfigPath)
	if err != nil {
		return nil, err
	}
	data, err := os.ReadFile(fname)
	if err != nil {
		return nil, err
	}

	return &regionalpb.APPBox{
		Kubernetes: &regionalpb.APPBox_Kubernetes{
			Version:   "1.31",
			Name:      k8sName,
			AccountId: "azure-account",
			Info: &regionalpb.APPBox_Kubernetes_Azure_{
				Azure: &regionalpb.APPBox_Kubernetes_Azure{
					NodeZones: []string{},
					NodeSubnets: []*regionalpb.APPBox_Kubernetes_AzureSubnet{
						{Id: "node-subnet-1"},
					},
					PodSubnets: []*regionalpb.APPBox_Kubernetes_AzureSubnet{
						{Id: "pod-subnet-1"},
					},
					ResourceGroup: "rg",
				},
			},
			Kubeconfig: base64.StdEncoding.EncodeToString(data), // reuse envtest apiserver as dataplane
		},
	}, nil
}

type scaler struct {
	s     cloud.Scaler
	ready bool
}

func (s *scaler) CheckNodesReady(ctx context.Context, req *cloud.NodeRequest) (bool, error) {
	if s.ready {
		return true, nil
	}
	return false, nil
}

func (s *scaler) CreateNodeScaleTrigger(ctx context.Context, req *cloud.NodeRequest) error {
	return s.s.CreateNodeScaleTrigger(ctx, req)
}

func (s *scaler) CleanNodeScaleTrigger(ctx context.Context) error {
	return s.s.CleanNodeScaleTrigger(ctx)
}
