package br

import (
	"context"
	"fmt"

	"github.com/tidbcloud/cluster-service-ng/pkg/storage/repo"
)

type GlobalCompensateResult struct {
	SQL             string
	CloudStorageURI string
}

func BuildGlobalCompensateResult(ctx context.Context, sharedPoolRepo repo.SharedPoolRepo, targetSharedPoolID string) (GlobalCompensateResult, error) {
	targetSharedPool, err := sharedPoolRepo.Load(ctx, targetSharedPoolID, false)
	if err != nil {
		return GlobalCompensateResult{}, fmt.Errorf("get target sharedPool %s failed: %w", targetSharedPoolID, err)
	}
	globalSortPath, err := targetSharedPool.GetDXFGlobalSortPath()
	if err != nil {
		return GlobalCompensateResult{}, fmt.Errorf("failed to get global sort path: %w", err)
	}
	return GlobalCompensateResult{
		SQL:             fmt.Sprintf("SET GLOBAL tidb_cloud_storage_uri = '%s'", globalSortPath),
		CloudStorageURI: globalSortPath,
	}, nil
}

func BuildGlobalCompensateSQL(ctx context.Context, sharedPoolRepo repo.SharedPoolRepo, targetSharedPoolID string) (string, error) {
	result, err := BuildGlobalCompensateResult(ctx, sharedPoolRepo, targetSharedPoolID)
	if err != nil {
		return "", err
	}
	return result.SQL, nil
}
