package validation

import (
	"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
	deployapi "github.com/openshift/origin/pkg/deploy/api"
)

// TODO: These tests validate the ReplicationControllerState in a Deployment or DeploymentConfig.
//       The upstream validation API isn't factored currently to allow this; we'll make a PR to
//       upstream and fix when it goes in.

func ValidateDeployment(deployment *deployapi.Deployment) errors.ErrorList {
	result := validateDeploymentStrategy(&deployment.Strategy).Prefix("Strategy")

	// TODO: validate ReplicationControllerState

	return result
}

func validateDeploymentStrategy(strategy *deployapi.DeploymentStrategy) errors.ErrorList {
	result := errors.ErrorList{}

	if len(strategy.Type) == 0 {
		result = append(result, errors.NewFieldRequired("Type", ""))
	}

	if strategy.CustomPod == nil {
		result = append(result, errors.NewFieldRequired("CustomPod", nil))
	} else {
		if len(strategy.CustomPod.Image) == 0 {
			result = append(result, errors.NewFieldRequired("CustomPod.Image", ""))
		}
	}

	return result
}

func validateTriggerPolicy(policy *deployapi.DeploymentTriggerPolicy) errors.ErrorList {
	result := errors.ErrorList{}

	if len(policy.Type) == 0 {
		result = append(result, errors.NewFieldRequired("Type", ""))
	}

	return result
}

func ValidateDeploymentConfig(config *deployapi.DeploymentConfig) errors.ErrorList {
	result := errors.ErrorList{}
	result = append(result, validateTriggerPolicy(&config.TriggerPolicy).Prefix("TriggerPolicy")...)
	result = append(result, validateDeploymentStrategy(&config.Template.Strategy).Prefix("Template.Strategy")...)

	// TODO: validate ReplicationControllerState

	return result
}