package config

import (
	"fmt"
	"io"
	"os"

	"github.com/BurntSushi/toml"
	storagev1 "k8s.io/api/storage/v1"
	"k8s.io/apimachinery/pkg/util/yaml"
)

func (c AWSConfig) GetAWSUserdataConfigurationFromFile() (string, error) {
	path := c.NodeUserdataSystemConfigurationFile
	if path == "" {
		// If the userdata system configuration is not set, simply pass and return nil.
		return "", nil
	}
	data, err := os.ReadFile(path)
	if err != nil {
		return "", fmt.Errorf("userdata configuration file load failed: %v", err)
	}
	var configData map[string]interface{}
	if err := toml.Unmarshal(data, &configData); err != nil {
		return "", fmt.Errorf("userdata configuration file parse validation failed: %v", err)
	}
	return string(data), nil
}

func parseStorageClassFromConfigFile(path string) ([]*storagev1.StorageClass, error) {
	if path == "" {
		return nil, fmt.Errorf("storageclass config file unspecified")
	}
	f, err := os.Open(path)
	defer f.Close() // nolint:staticcheck
	if err != nil {
		return nil, err
	}
	var scs []*storagev1.StorageClass
	dec := yaml.NewYAMLToJSONDecoder(f)
	for {
		sc := new(storagev1.StorageClass)
		if err := dec.Decode(sc); err != nil {
			if err == io.EOF {
				break
			}
			return nil, err // make sure all storageclasses are valid
		}
		scs = append(scs, sc)
	}
	return scs, nil
}
