/* ----------------------------------------
 * Origin  : GFI INFORMATIQUE 
 * Project : CDPP Propagation Tool 
 * ----------------------------------------
 * History 
 * Version : 30/08/2016 : SCA : V2.2 (PTSW H2020)
 * ----------------------------------------
 */
package fr.tlse.irap.tool;

import java.util.Date;

import jakarta.jws.WebMethod;
import jakarta.jws.WebService;
import jakarta.jws.soap.SOAPBinding;
import jakarta.jws.soap.SOAPBinding.Style;

import fr.tlse.irap.spaceElement.SpaceElement;
import fr.tlse.irap.tool.corotation.Corotation;
import fr.tlse.irap.tool.corotation.CorotationCatalog;
import fr.tlse.irap.tool.corotation.CorotationEnd;
import fr.tlse.irap.tool.radial.CMEType;
import fr.tlse.irap.tool.radial.Radial;
import fr.tlse.irap.tool.radial.RadialCatalog;
import fr.tlse.irap.tool.radial.RadialEnd;
import fr.tlse.irap.tool.sep.Sep;
import fr.tlse.irap.tool.sep.SepEnd;

@WebService
@SOAPBinding(style = Style.RPC)
public interface ITool {
	
	/**
	 * Compute radial propagation from a start to end elements
	 * @param radial
	 * @param endElement
	 * @return radialEnd containing result of propagation (time, ...)
	 */
	@WebMethod 
	RadialEnd computeRadial(Radial radial, SpaceElement endElement);
	
	/**
	 * Compute corotation propagation from a start to end elements
	 * @param corotation
	 * @param endElement
	 * @return corotationEnd containing result of propagation (time, ...)
	 */
	@WebMethod 
	CorotationEnd computeCorotation(Corotation corotation, SpaceElement endElement);

	/**
	 * Compute SEP propagation from a start to end elements
	 * @param sep
	 * @param endElement
	 * @return sepEnd containing result of propagation (time, ...)
	 */
	@WebMethod 
	SepEnd computeSep(Sep sep, SpaceElement spaceElement);

	/**
	 * Get radial CMEs catalogue between 2 dates  
	 * @param t1
	 * @param t2
	 * @param targetId : target element NAIF ID or ALL if 0
	 * @param cmeType : FixedPoint or SSE
	 * @param observer : STEREO-A, STEREO-B
	 * @param extent : extent of CME in degrees (default is 45°)
	 * @return radial catalogue
	 */
	@WebMethod 
	RadialCatalog getRadialCatalog(Date t1, Date t2, int targetId, CMEType cmeType, String observer, double extent);

	/**
	 * Get LINKCAT ICMEs catalogue between 2 dates  
	 * @param t1
	 * @param t2
	 * @param cmeType : FixedPoint or SSE
	 * @param observer : STEREO-A, STEREO-B
	 * @param extent : extent of CME in degrees (default is 45°)
	 * @return radial LINKCAT catalogue
	 */
	@WebMethod 
	RadialCatalog getLinkcatCatalog(Date t1, Date t2, CMEType cmeType, String observer, double extent);

	/**
	 * Get corotation CIRs catalogue between 2 dates  
	 * @param t1
	 * @param t2
	 * @param targetId : target element NAIF ID or ALL if 0
	 * @param observer : STEREO-A, STEREO-B or SOHO
	 * @param extent : extent of CME in degrees (default is 45°)
	 * @return corotation catalogue
	 */
	@WebMethod 
	CorotationCatalog getCorotationCatalog(Date t1, Date t2, int targetId, String observer, double spread);

}
