package kubernetes

import (
	"errors"
	"net/http"
)

type (
	K8sServiceInfo struct {
		Name                          string              `json:"Name"`
		UID                           string              `json:"UID"`
		Type                          string              `json:"Type"`
		Namespace                     string              `json:"Namespace"`
		Annotations                   map[string]string   `json:"Annotations"`
		CreationTimestamp             string              `json:"CreationTimestamp"`
		Labels                        map[string]string   `json:"Labels"`
		AllocateLoadBalancerNodePorts *bool               `json:"AllocateLoadBalancerNodePorts,omitempty"`
		Ports                         []K8sServicePort    `json:"Ports"`
		Selector                      map[string]string   `json:"Selector"`
		IngressStatus                 []K8sServiceIngress `json:"IngressStatus"`
	}

	K8sServicePort struct {
		Name       string `json:"Name"`
		NodePort   int    `json:"NodePort"`
		Port       int    `json:"Port"`
		Protocol   string `json:"Protocol"`
		TargetPort int    `json:"TargetPort"`
	}

	K8sServiceIngress struct {
		IP   string `json:"IP"`
		Host string `json:"Host"`
	}

	// K8sServiceDeleteRequests is a mapping of namespace names to a slice of
	// service names.
	K8sServiceDeleteRequests map[string][]string
)

func (s *K8sServiceInfo) Validate(request *http.Request) error {
	if s.Name == "" {
		return errors.New("missing service name from the request payload")
	}
	if s.Namespace == "" {
		return errors.New("missing service namespace from the request payload")
	}
	if s.Ports == nil {
		return errors.New("missing service ports from the request payload")
	}
	return nil
}

func (r K8sServiceDeleteRequests) Validate(request *http.Request) error {
	if len(r) == 0 {
		return errors.New("missing deletion request list in payload")
	}
	for ns := range r {
		if len(ns) == 0 {
			return errors.New("deletion given with empty namespace")
		}
	}
	return nil
}
