/* ----------------------------------------
 * Origin  : GFI INFORMATIQUE 
 * Project : CDPP Propagation Tool 
 * ----------------------------------------
 * History 
 * Version : 01/05/2015 : SCA : V2.1
 * Version : 24/03/2016 : SCA : V2.2 (PSWS-H2020)
 * Add comets
 * Version : 05/05/2021 : LBE
 * DM-ID : Redmine#7059 : 05/05/2021 : get orbits between 2 dates
 * ----------------------------------------
 */
package fr.tlse.irap.pos;

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.Instruments;
import fr.tlse.irap.spaceElement.SpaceElement;
import fr.tlse.irap.spaceElement.SpaceElementWrapper;

@WebService
@SOAPBinding(style = Style.RPC)
public interface IPosition {

	
	/**
	 * Get position of a space element at date time.
	 * @param spaceElement
	 * @param time
	 * @return
	 */
	@WebMethod
	SpaceElement getPositionElement(SpaceElement spaceElement, Date time);
	
	/**
	 * Get position of a spacecraft at date time in HEEQ system using the new 3Dview 
	 * @param spaceElement
	 * @param time
	 * @return the space element with its real coordinates.
	 */
	@WebMethod
	SpaceElement getHEEQPositionElement(SpaceElement spaceElement, Date time);

        
	/**
	 * Get position of a body in ECLIPJ2000 system using the new 3Dview service
	 * @param spaceElement with timeValues set for each desire position
	 * @return the space element with its real coordinates.
	 */
        @WebMethod
        SpaceElement getPositionsElement(SpaceElement spaceElement);
        
        
	/**
	 * Get all space elements from date time with orbits.
	 * @param time
	 * @return a list of space elements having positions defined between start time and start time + delta t
	 */
	@WebMethod
	SpaceElementWrapper getOrbits(Date time);
	
	/**
	 * Get orbit of selected elements from date d.
	 * @param spaceElementWrapper
	 * @param time
	 * @return the list of space element with orbit positions defined between start time and start time + delta t
	 */
	@WebMethod
	SpaceElementWrapper getOrbitElements(SpaceElementWrapper spaceElementWrapper, Date time);
	
	/**
	 * Get available comets in a region around a space element between 2 dates
	 * @param startTime
	 * @param endTime
	 * @param spaceElement
	 * @param distance
	 * @return
	 */
	@WebMethod
	SpaceElementWrapper getAvailableComets(Date startTime, Date endTime, SpaceElement spaceElement, long distance);
	
	/**
	 * Get instruments list belonging to a probe
	 * @param naifId S/C
	 * @return
	 */
	@WebMethod
	Instruments getProbeInstruments(int naifId);
	
	
}
