package s3

import (
	"context"
	"fmt"

	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/log"
	"go.uber.org/zap"
	"gopkg.in/yaml.v3"
)

// 定义部分结构，只需要解析我们关心的字段
type ClusterBaseInfo struct {
	CommonReqInfo struct {
		Vendor string `yaml:"vendor"`
		Region string `yaml:"region"`
	} `yaml:"commonreqinfo"`
	TenantID        string `yaml:"tenantid"`
	ProjectID       string `yaml:"projectid"`
	ApplicationID   string `yaml:"applicationid"`
	BizType         string `yaml:"biztype"`
	ID              string `yaml:"id"`
	ShareMode       string `yaml:"sharemode"`
	Note            string `yaml:"note"`
	DataRights      int    `yaml:"datapropertyrights"`
	InternalReadURI string `yaml:"internalreaduri"`
	OpenReadURI     string `yaml:"openreaduri"`
}

type ClusterYaml struct {
	ClusterBaseInfo ClusterBaseInfo `yaml:"clusterbaseinfo"`
}
type GetDeleteClusterAppIdReq struct {
	ClusterID string
	Region    string
	OrgID     string
	ProjectID string
}

func GetDeleteClusterAppId(ctx context.Context, req GetDeleteClusterAppIdReq) string {
	// cluster := config.GetClusterByID(clusterId)
	// cluster, _ := common.GetCluster(context.Background(), clusterId)

	if req.Region == "" || req.OrgID == "" || req.ProjectID == "" {
		return ""
	}

	bucket := fmt.Sprintf("o11y-prod-shared-%s", req.Region)
	key := fmt.Sprintf("archived/tidbcloud/%s/%s/%s/cluster.yaml", req.OrgID, req.ProjectID, req.ClusterID) // big3 dir

	s3Client, err := GetS3ClientByGithubToken(req.Region, bucket)
	if err != nil {
		log.Error(ctx, "Failed to get S3 client", zap.Error(err))
		return ""
	}

	strByte, err := s3Client.ReadFile(key)
	if err != nil {
		return ""
	}

	fileContent := string(strByte)
	log.PlainInfo("cluster.yaml content", zap.String("content", fileContent))

	id := parseClusterID(fileContent)
	fmt.Println("Cluster ID:", id)
	return id
}

func parseClusterID(yamlContent string) string {
	var data ClusterYaml
	if err := yaml.Unmarshal([]byte(yamlContent), &data); err != nil {
		log.PlainError("failed to parse yaml: %v", zap.Error(err))
		return ""
	}
	return data.ClusterBaseInfo.ID
}
