package cloud

import (
	"context"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/types"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

type Provider interface {
	StorageProvider
	K8sGetter
}

type StorageProvider interface {
	BuildVolumeAttributesClass(types.NamespacedName, *VolumeAttributes) (client.Object, error)
}

type CertificateProvider interface {
	BuildCertificate(types.NamespacedName, *CertificateRequest) (client.Object, error)
	DeleteCertificate(context.Context, client.Client, types.NamespacedName) error
}

type CertificateRequest struct {
	Duration    *metav1.Duration
	RenewBefore *metav1.Duration
	DNSNames    []string
	IPAddresses []string
}

// K8sGetter gets the k8s cluster info
type K8sGetter interface {
	GetKubeClient(context.Context) (client.Client, error)
	//GetKubernetesName(context.Context) (string, error)
	//GetKubernetesVersion(context.Context) (string, error)
	//GetKubernetesID(context.Context) (string, error)
	//GetNodeZones(context.Context) ([]string, error)
	//GetNodeSubnets(context.Context) ([]string, error)
	//GetPodSubnets(context.Context) ([]string, error)
	//GetSecondaryNodeSubnets(context.Context) ([]string, error)
}

type VolumeAttributes struct {
	Type          string
	Iops          uint32
	ThroughputMbs uint32
}
