/*******************************************************************************
 * Copyright (c) 2015 Red Hat, Inc. Distributed under license by Red Hat, Inc.
 * All rights reserved. This program is made available under the terms of the
 * Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors: Red Hat, Inc.
 ******************************************************************************/
package com.openshift.restclient.model;

import java.util.List;
import java.util.Map;

/**
 * Kubernetes Service to access a Pod
 * 
 * @author Jeff Cantrill
 */
public interface IService extends IResource{

	/**
	 * Sets the container port exposed by the image  
	 * @param port
	 */
	void setTargetPort(int port);
	
	/**
	 * Sets the exposed port that is mapped to a
	 * running image
	 * @param port
	 */
	void setPort(int port);

	/**
	 * Returns the first exposed port that is mapped to
	 * a running image
	 * @return
	 */
	int getPort();
	
	IServicePort addPort(int port, int targetPort);
	
	IServicePort addPort(int port, int targetPort, String name);
	
	/**
	 * Sets the container name that the service
	 * routes traffic to. 
	 * @param selector
	 */
	void setSelector(Map<String, String> selector);
	
	/**
	 * Convenience method for setting a selector that has
	 * a singular key/value pair.
	 * @param key
	 * @param value
	 */
	void setSelector(String key, String value);
	
	/**
	 * Returns the selector used to find the Pod
	 * to which this service is routing
	 * @return
	 */
	Map<String, String> getSelector();

	/**
	 * The port this service targets on the
	 * pod
	 * @return
	 */
	String getTargetPort();
	
	/**
	 * Returns the IP of the service.
	 * @return
	 */
	@Deprecated
	String getPortalIP();
	
	/**
	 * Returns the IP of the service.
	 * @return
	 */
	String getClusterIP();
	
	/**
	 * Retrieves the pods for this service
	 * @return
	 */
	List<IPod> getPods();
	
	/**
	 * Get the collection of ports for the service
	 * @return
	 */
	List<IServicePort> getPorts();
	
	/**
	 * Set the collection of ports for the service 
	 */
	void setPorts(List<IServicePort> ports);

	/**
	 * Returns the type of the service.
	 * @return
	 */
	String getType();

	/**
	 * Sets the type of the service.
	 */
	void setType(String type);
}
