// Package pimport add by blacknc <blacknc@163.com> at 2024/09/02 18:27:06
package pimport

import (
	"context"
	"errors"
	"reflect"
	"testing"

	regionalapi "github.com/tidbcloud/dataflow-service/pkg/regional-api"
	"github.com/tidbcloud/eks-provider/api/v1alpha1"
	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
	dedicatedv1 "github.com/tidbcloud/infra-provider/api/tidbcloud/regional-server/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type mockTCIDMHTTPClient struct{}

var (
	_ regionalapi.TCIDMHTTPClient = &mockTCIDMHTTPClient{}
)

// CreateDMJobIgnoreExists implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) CreateDMJobIgnoreExists(ctx context.Context, in *v1alpha1.DMJob) error {
	panic("unimplemented")
}

// CreatePrivateLinkEndpointIgnoreExists implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) CreatePrivateLinkEndpointIgnoreExists(ctx context.Context, in *v1alpha1.PrivateLinkEndpoint) error {
	panic("unimplemented")
}

// DelDMJobIgnoreNotExists implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) DelDMJobIgnoreNotExists(ctx context.Context, ns string, name string) error {
	panic("unimplemented")
}

// DeletePrivateLinkEndpointIgnoreExists implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) DeletePrivateLinkEndpointIgnoreExists(ctx context.Context, ns string, name string) error {
	panic("unimplemented")
}

// GetClusterRole implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) GetClusterRole(ctx context.Context, clusterID uint64) (*dedicatedv1.ClusterRole, error) {
	panic("unimplemented")
}

// GetDMJob implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) GetDMJob(ctx context.Context, ns string, name string) (*v1alpha1.DMJob, error) {
	panic("unimplemented")
}

// GetPrivateLinkEndpoint implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) GetPrivateLinkEndpoint(ctx context.Context, ns string, name string) (*v1alpha1.PrivateLinkEndpoint, error) {
	panic("unimplemented")
}

// ListVPCs implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) ListVPCs(ctx context.Context, orgID uint64, projectID uint64, clusterID uint64, statuses []regionalapi.VPCStatus) ([]regionalapi.RegionalNetwork, error) {
	panic("unimplemented")
}

// ProxyPUT implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) ProxyPUT(ctx context.Context, path string, data any, header map[string]string) ([]byte, error) {
	panic("unimplemented")
}

// SetResponseHandler implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) SetResponseHandler(handler regionalapi.ResponseHandler) regionalapi.TCIDMHTTPClient {
	panic("unimplemented")
}

// UpdateDMJob implements regionalapi.TCIDMHTTPClient.
func (m *mockTCIDMHTTPClient) UpdateDMJob(ctx context.Context, in *v1alpha1.DMJob) error {
	panic("unimplemented")
}

func (m *mockTCIDMHTTPClient) CreateImportIgnoreExists(ctx context.Context, in *cloudv1.Import) error {
	if in.Name == "import-1" {
		return nil
	}
	return errors.New("unknown error")
}
func (m *mockTCIDMHTTPClient) GetImport(ctx context.Context, ns, name string) (*cloudv1.Import, error) {
	return nil, nil
}
func (m *mockTCIDMHTTPClient) DelImportIgnoreNotExists(ctx context.Context, ns, name string) error {
	return nil
}
func (m *mockTCIDMHTTPClient) ProxyGET(ctx context.Context, path string, header map[string]string) ([]byte, error) {
	return nil, nil
}
func (m *mockTCIDMHTTPClient) ProxyPOST(ctx context.Context, path string, data any, header map[string]string) ([]byte, error) {
	return nil, nil
}
func (m *mockTCIDMHTTPClient) ProxyDELETE(ctx context.Context, url string, header map[string]string) ([]byte, error) {
	return nil, nil
}

func Test_regionalResourceAPI_CreateImportIgnoreExists(t *testing.T) {
	type args struct {
		ctx context.Context
		imp *cloudv1.Import
	}

	ctx := context.TODO()
	regionalAPI := &mockTCIDMHTTPClient{}
	tests := []struct {
		name    string
		args    args
		wantErr bool
	}{
		{
			name: "create - OK",
			args: args{
				ctx: ctx,
				imp: &cloudv1.Import{
					ObjectMeta: metav1.ObjectMeta{
						Namespace: "test-99",
						Name:      "import-1",
					},
				},
			},
			wantErr: false,
		},
		{
			name: "create - Timeout",
			args: args{
				ctx: ctx,
				imp: &cloudv1.Import{
					ObjectMeta: metav1.ObjectMeta{
						Namespace: "test-99",
						Name:      "import-2",
					},
				},
			},
			wantErr: true,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			a := &regionalResourceAPI{
				regionalAPI: regionalAPI,
			}
			if err := a.CreateImportIgnoreExists(tt.args.ctx, tt.args.imp); (err != nil) != tt.wantErr {
				t.Errorf("regionalResourceAPI.CreateImportIgnoreExists() error = %v, wantErr %v", err, tt.wantErr)
			}
		})
	}
}

func Test_regionalResourceAPI_GetImport(t *testing.T) {
	type fields struct {
		regionalAPI regionalapi.TCIDMHTTPClient
	}
	type args struct {
		ctx       context.Context
		projectID uint64
		importID  uint64
	}
	tests := []struct {
		name    string
		fields  fields
		args    args
		want    *cloudv1.Import
		wantErr bool
	}{
		// TODO: Add test cases.
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			a := &regionalResourceAPI{
				regionalAPI: tt.fields.regionalAPI,
			}
			got, err := a.GetImport(tt.args.ctx, tt.args.projectID, tt.args.importID)
			if (err != nil) != tt.wantErr {
				t.Errorf("regionalResourceAPI.GetImport() error = %v, wantErr %v", err, tt.wantErr)
				return
			}
			if !reflect.DeepEqual(got, tt.want) {
				t.Errorf("regionalResourceAPI.GetImport() = %v, want %v", got, tt.want)
			}
		})
	}
}
