package privatelinkservicemigration

import (
	"context"

	globaldedicatedv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/dedicated/v1"
	privatelinkservicemigrationrepo "github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/repository/privatelinkservicemigration"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

func (svc *service) List(
	ctx context.Context,
	req *globaldedicatedv1.ListPrivateLinkServiceMigrationsRequest,
) ([]*globaldedicatedv1.PrivateLinkServiceMigration, error) {
	_, span := tracer.Start(ctx, "Domain.ListPrivateLinkServiceMigrationsSvc")
	defer span.End()

	filter := &privatelinkservicemigrationrepo.Filter{
		OrganizationID:  req.GetOrganizationId(),
		ProjectID:       req.GetProjectId(),
		SourceClusterID: req.GetSourceClusterId(),
		TargetClusterID: req.GetTargetClusterId(),
	}

	migrations, err := svc.privatelinkservicemigrationRepo.List(ctx, filter)
	if err != nil {
		return nil, err
	}

	return migrations, nil
}

func (svc *service) Get(
	ctx context.Context,
	req *globaldedicatedv1.GetPrivateLinkServiceMigrationRequest,
) (*globaldedicatedv1.PrivateLinkServiceMigration, error) {
	_, span := tracer.Start(ctx, "Domain.GetPrivateLinkServiceMigrationSvc")
	defer span.End()

	if req.GetId() == 0 {
		return nil, bizerr.New(bizerr.ErrCodeParams, "id is required")
	}

	migration, err := svc.privatelinkservicemigrationRepo.Get(ctx, req.GetId())
	if err != nil {
		return nil, err
	}

	return migration, nil
}
