package eksconfig

import (
	"errors"

	"github.com/aws/aws-k8s-tester/pkg/timeutil"
)

// AddOnCSIEBS defines parameters for EKS cluster
// add-on AWS EBS CSI Driver.
// ref. https://github.com/kubernetes-sigs/aws-ebs-csi-driver#deploy-driver
type AddOnCSIEBS struct {
	// Enable is 'true' to create this add-on.
	Enable bool `json:"enable"`
	// Created is true when the resource has been created.
	// Used for delete operations.
	Created         bool               `json:"created" read-only:"true"`
	TimeFrameCreate timeutil.TimeFrame `json:"time-frame-create" read-only:"true"`
	TimeFrameDelete timeutil.TimeFrame `json:"time-frame-delete" read-only:"true"`

	// ChartRepoURL is the chart repo URL.
	// e.g. https://github.com/kubernetes-sigs/aws-ebs-csi-driver/releases/download/v0.5.0/helm-chart.tgz
	ChartRepoURL string `json:"chart-repo-url"`
}

// EnvironmentVariablePrefixAddOnCSIEBS is the environment variable prefix used for "eksconfig".
const EnvironmentVariablePrefixAddOnCSIEBS = AWS_K8S_TESTER_EKS_PREFIX + "ADD_ON_CSI_EBS_"

// IsEnabledAddOnCSIEBS returns true if "AddOnCSIEBS" is enabled.
// Otherwise, nil the field for "omitempty".
func (cfg *Config) IsEnabledAddOnCSIEBS() bool {
	if cfg.AddOnCSIEBS == nil {
		return false
	}
	if cfg.AddOnCSIEBS.Enable {
		return true
	}
	cfg.AddOnCSIEBS = nil
	return false
}

func getDefaultAddOnCSIEBS() *AddOnCSIEBS {
	return &AddOnCSIEBS{
		Enable: false,
		// https://github.com/kubernetes-sigs/aws-ebs-csi-driver#deploy-driver
		ChartRepoURL: "https://github.com/kubernetes-sigs/aws-ebs-csi-driver/releases/download/v0.5.0/helm-chart.tgz",
	}
}

func (cfg *Config) validateAddOnCSIEBS() error {
	if !cfg.IsEnabledAddOnCSIEBS() {
		return nil
	}
	if cfg.AddOnCSIEBS.ChartRepoURL == "" {
		return errors.New("unexpected empty AddOnCSIEBS.ChartRepoURL")
	}
	return nil
}