package framework

import (
	"context"

	v1 "k8s.io/api/core/v1"
	storagev1 "k8s.io/api/storage/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func (f *Framework) AllServices() *v1.ServiceList {
	list, err := f.KubeClientSetPack.ClientSet.CoreV1().Services(f.Namespace).List(context.TODO(), metav1.ListOptions{})
	ExpectNoError(err)
	return list
}

func (f *Framework) AllPods() *v1.PodList {
	list, err := f.KubeClientSetPack.ClientSet.CoreV1().Pods(f.Namespace).List(context.TODO(), metav1.ListOptions{})
	ExpectNoError(err)
	return list
}

func (f *Framework) AllPVCs() *v1.PersistentVolumeClaimList {
	list, err := f.KubeClientSetPack.ClientSet.CoreV1().PersistentVolumeClaims(f.Namespace).List(context.TODO(), metav1.ListOptions{})
	ExpectNoError(err)
	return list
}

func (f *Framework) AllConfigmaps() *v1.ConfigMapList {
	list, err := f.KubeClientSetPack.ClientSet.CoreV1().ConfigMaps(f.Namespace).List(context.TODO(), metav1.ListOptions{})
	ExpectNoError(err)
	return list
}

func (f *Framework) AllNodes() *v1.NodeList {
	list, err := f.KubeClientSetPack.ClientSet.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})
	ExpectNoError(err)
	return list
}

func (f *Framework) AllStorageClass() *storagev1.StorageClassList {
	list, err := f.KubeClientSetPack.ClientSet.StorageV1().StorageClasses().List(context.TODO(), metav1.ListOptions{})
	ExpectNoError(err)
	return list
}

func (f *Framework) AllStorageClassPreferNotDefault() []storagev1.StorageClass {
	var res []storagev1.StorageClass
	list := f.AllStorageClass()
	if len(list.Items) == 1 {
		return []storagev1.StorageClass{list.Items[0]}
	}
	for idx, item := range list.Items {
		if item.Annotations["storageclass.kubernetes.io/is-default-class"] == "true" {
			continue
		}
		res = append(res, list.Items[idx])
	}
	return res
}
