package resolver

// This file will be automatically regenerated based on the schema, any resolver implementations
// will be copied through when generating and any unknown code will be moved to the end.
// Code generated by github.com/99designs/gqlgen version v0.17.45

import (
	"context"
	"fmt"

	"edge-infra.dev/pkg/edge/api/graph/model"
)

// CreateNamespace is the resolver for the createNamespace field.
func (r *mutationResolver) CreateNamespace(ctx context.Context, createNamespace model.NamespaceCreateInput) (*model.Namespace, error) {
	return r.NamespaceService.CreateNamespaceEntry(ctx, &createNamespace)
}

// DeleteNamespace is the resolver for the deleteNamespace field.
func (r *mutationResolver) DeleteNamespace(ctx context.Context, bannerEdgeID string, name string) (bool, error) {
	namespaces, err := r.NamespaceService.GetBannerNamespaces(ctx, bannerEdgeID, &name)
	if err != nil {
		return false, err
	}
	if len(namespaces) != 1 {
		return false, fmt.Errorf("could not find namespace to delete")
	}
	namespace := namespaces[0]
	count, err := r.NamespaceService.GetNumClustersUsingNamespace(ctx, namespace.NamespaceEdgeID)
	if err != nil {
		return false, err
	}
	if count != 0 {
		return false, fmt.Errorf("cannot delete a namespace that is in use by clusters")
	}
	if err = r.NamespaceService.DeleteNamespaceEntry(ctx, bannerEdgeID, name); err != nil {
		return false, err
	}
	return true, nil
}

// BannerNamespaces is the resolver for the bannerNamespaces field.
func (r *queryResolver) BannerNamespaces(ctx context.Context, bannerEdgeID string, name *string) ([]*model.Namespace, error) {
	return r.NamespaceService.GetBannerNamespaces(ctx, bannerEdgeID, name)
}

// ClusterNamespaces is the resolver for the clusterNamespaces field.
func (r *queryResolver) ClusterNamespaces(ctx context.Context, clusterEdgeID string, name *string) ([]*model.Namespace, error) {
	return r.NamespaceService.GetClusterNamespaces(ctx, clusterEdgeID, name)
}