package com.ejie.ad74a.ws.client.platea.service;

import java.util.ArrayList;
import java.util.List;

import com.ejie.ad74a.model.BandejaPapel0;
import com.ejie.ad74a.model.DocumentoPapel0;
import com.ejie.ad74a.model.DocumentosTarea;
import com.ejie.ad74a.model.Expedientes;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TFolderStoredStatusResultList;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TStoreDocumentList;
import com.ejie.ad74a.ws.client.platea.notificaciones.TAttachmentSend;
import com.ejie.ad74a.ws.client.platea.tareasTramitacion.TMessage;
import com.ejie.ad74a.ws.client.platea.tareasTramitacion.TWaitFilter;

/**
 * PlateaService.
 * 
 * @author
 */

public interface PlateaService {

	String getRequestInformation(String idSolicitud, String folderId);

	boolean validateRepresentative(String idTitular, String idRepresentante);

	com.ejie.ad74a.ws.client.platea.tareasTramitacion.TTask prepareTask(String taskGUID,
			com.ejie.ad74a.ws.client.platea.tareasTramitacion.TTaskType taskType);

	/**
	 * Busca tareas de un expediente
	 * 
	 * @param folderID
	 * @param estado
	 * @param tipologia
	 * @param filters
	 * @return
	 */
	com.ejie.ad74a.ws.client.platea.tareasTramitacion.TMessageList getGATTask(String folderID,
			com.ejie.ad74a.ws.client.platea.tareasTramitacion.TMessageStatus estado,
			com.ejie.ad74a.ws.client.platea.tareasTramitacion.TMessageTipology tipologia,
			com.ejie.ad74a.ws.client.platea.tareasTramitacion.TMessageFilterValue... filters);

	com.ejie.ad74a.ws.client.platea.tareasTramitacion.TBoolean prepareNewTask(String procedureID, String folderID,
			String proceedingID, String taskID,
			com.ejie.ad74a.ws.client.platea.tareasTramitacion.TPersonIDName senderID,
			com.ejie.ad74a.ws.client.platea.tareasTramitacion.TStringList mailboxes);

	com.ejie.ad74a.ws.client.platea.tareasTramitacion.TTask doTask(
			com.ejie.ad74a.ws.client.platea.tareasTramitacion.TTaskType taskType,
			com.ejie.ad74a.ws.client.platea.tareasTramitacion.TTask task);

	boolean cancelarTarea(String taskGUID);

	boolean actualizarInstructorExpediente(String folderID, String buzonInstructor);

	com.ejie.ad74a.ws.client.platea.tareasTramitacion.TBoolean assignTasks(String taskGuid, String mailBoxId);

	com.ejie.ad74a.ws.client.platea.expedienteElectronico.TGetTelActionDocumentList getDocumentsTelAction(
			String folderID, String procedureID);

	com.ejie.ad74a.ws.client.platea.expedienteElectronico.TBoolean authorizationCall(String authorizationID,
			String proceedingID, com.ejie.ad74a.ws.client.platea.expedienteElectronico.TAuthSvt svt,
			com.ejie.ad74a.ws.client.platea.expedienteElectronico.TAuthSvt svtTer);

	com.ejie.ad74a.ws.client.platea.expedienteElectronico.TBoolean documentChangeRoleID(String oidDocument,
			String documentRoleID, com.ejie.ad74a.ws.client.platea.expedienteElectronico.TPersonIDName senderID,
			String procedureID);

	com.ejie.ad74a.ws.client.platea.procedimientos.TDocumentRoleList getDocumentalRoles(String procedureID,
			String idActionTelem);

	com.ejie.ad74a.ws.client.platea.procedimientos.TProcedureList getProcedure(String procedureID);

	com.ejie.ad74a.ws.client.platea.solAportacion.TSubmissionResponse iniciarExpOficio(
			com.ejie.ad74a.ws.client.platea.solAportacion.TAdminInitRequest request);

	com.ejie.ad74a.ws.client.platea.expedienteElectronico.TFolderList searchFolders(ArrayList<String> foldersID,
			com.ejie.ad74a.ws.client.platea.expedienteElectronico.TFolderSearchType tipoBusqueda);

	String aperturaSolicitud(Expedientes expediente, List<DocumentosTarea> listaDocumentos);

	String aportacionDocuPapel0(Expedientes expediente, List<DocumentoPapel0> listDocPapel0,
			BandejaPapel0 bandejaPapel0);

	com.ejie.ad74a.ws.client.platea.tareasTramitacion.TBoolean endWait(String waitID, String idResultWait);

	com.ejie.ad74a.ws.client.platea.tareasTramitacion.TWaitList getWait(String folderID);

	com.ejie.ad74a.ws.client.platea.tareasTramitacion.TTaskAndWaitList searchWaits(
			com.ejie.ad74a.ws.client.platea.tareasTramitacion.TStringList folderIDList,
			com.ejie.ad74a.ws.client.platea.tareasTramitacion.TStringList procedureIDList, TWaitFilter filter);

	void updateTitularFolders(ArrayList<String> foldersID, Solicitantes solicitante, Solicitantes representante);

	/**
	 * [jbhg] Busca informacion de notificaciones en PLATEA (pueden buscarse mas de
	 * una a la vez)
	 * 
	 * @param filter
	 * @return
	 */
	List<com.ejie.ad74a.ws.client.platea.notificaciones.TNotification> searchNotifications(
			com.ejie.ad74a.ws.client.platea.notificaciones.TNotificationFilter filter);

	/**
	 * Servicio que realiza una aportacion presencial al expediente, de todos los
	 * servicios de interoperabilidad configurados en el procedimiento.
	 * 
	 * @param expediente
	 * @param listDocInterop
	 * @return
	 */
	String aportacionInteroperabilidad(Expedientes expediente);

	/**
	 * 
	 * @param folderID
	 * @return
	 */
	String getParticipantID(String folderID);

	public TStoreDocumentList getStoredFolderDocuments(ArrayList<String> listaFolderIDs);

	public TFolderStoredStatusResultList setStoredFolderStatus(List<Expedientes> listaExpedientes, boolean archivados);

	/**
	 * Recupera los documentos adjunto remito para un filtro dado.
	 * 
	 * @param attachmentSend filtro para obtener los adjunto-remito
	 * @return Ruta PIF del documento PDF con los adjunto-remito obtenidos
	 */
	String getAttachmentSend(TAttachmentSend attachmentSend);

	/**
	 * Recupera la propiedad indicada enl esrvicio mejga
	 * 
	 * @param tMessage
	 * @param key
	 * @return
	 */
	String getMessageParameter(TMessage tMessage, String key);

}
