package loader

import (
	"context"
	"fmt"

	"github.com/tidbcloud/devops/pkg/infra/config"
	"github.com/tidbcloud/devops/pkg/infra/secretsource"

	"gopkg.in/yaml.v3"
)

type ConfigurationSourceSecret struct {
}

func NewConfigurationSourceSecret() *ConfigurationSourceSecret {
	return &ConfigurationSourceSecret{}
}

func (s *ConfigurationSourceSecret) Load(ctx context.Context, pre *config.RootConfig) (*config.RootConfig, error) {
	if pre.SecretSource.RootConfigSecretName == "" {
		return nil, nil
	}

	source, err := secretsource.NewSecretSource(pre.SecretSource)
	if err != nil {
		return nil, fmt.Errorf("build secret source failed: %w", err)
	}

	secretData, err := source.GetSecretValue(ctx, pre.SecretSource.RootConfigSecretName)
	if err != nil {
		return nil, fmt.Errorf("failed to get secret value of root config: %w", err)
	}

	secrets := config.RootConfig{}
	err = yaml.Unmarshal([]byte(secretData), &secrets)
	if err != nil {
		return nil, fmt.Errorf("failed to unmarshal secret")
	}

	return &secrets, nil
}
