/*
Copyright (c) Edgeless Systems GmbH

SPDX-License-Identifier: AGPL-3.0-only
*/

package client

import (
	"encoding/json"
	"errors"

	"github.com/spf13/afero"
)

// cloudConfig uses same format as azure cloud controller manager to share the same kubernetes secret.
// this definition only contains the fields we need.
// reference: https://cloud-provider-azure.sigs.k8s.io/install/configs/ .
type cloudConfig struct {
	TenantID       string `json:"tenantId,omitempty"`
	SubscriptionID string `json:"subscriptionId,omitempty"`
	ResourceGroup  string `json:"resourceGroup,omitempty"`
}

// loadConfig loads the cloud config from the given path.
func loadConfig(fs afero.Fs, path string) (*cloudConfig, error) {
	rawConfig, err := afero.ReadFile(fs, path)
	if err != nil {
		return nil, err
	}
	var config cloudConfig
	if err := json.Unmarshal(rawConfig, &config); err != nil {
		return nil, err
	}
	if config.TenantID == "" || config.SubscriptionID == "" {
		return nil, errors.New("invalid config: tenantId and subscriptionId are required")
	}
	return &config, nil
}
