package ejb.medicalTest;

import java.util.Date;
import java.util.List;

import javax.ejb.Remote;

import TO.MedicalSpecialtyTO;
import TO.MedicalTestTO.MedicalTestType;
import TO.QuestionTO;

/**
 * Interfaz remota del EJB Definimos los métodos que estarán disponibles para
 * los clientes del EJB
 * 
 * @author rorden
 *
 */
@Remote
public interface MedicalTestFacadeRemote {

	// *********************************************************************
	// QUESTION RESPONSE

	/**
	 * Realizar una pregunta al médico por un paciente
	 * 
	 * @param professionalNumber
	 * @param title
	 * @param message
	 */
	public void askQuestion(int professionalNumber, String title, String message);

	/**
	 * El médico responde a una pregunta
	 * 
	 * @param question
	 * @param response
	 */
	public void answerQuestion(QuestionTO question);

	/**
	 * Recuperar las preguntas sin respuesta para un médico
	 * 
	 * De utilidad para paciente y médico de familia. No para médico especialista.
	 * 
	 * @param familydoctorid
	 */
	public List<QuestionTO> listAllPendingQuestions(int familyDoctorId);

	/**
	 * Recuperar las preguntas hechas por un paciente
	 */
	public List<QuestionTO> listAllMyQuestions(int userId);

	public Long getPendingQuestionsCount(int familyDoctorId);
	
	public List<QuestionTO> listPendingQuestionsPaged(int familyDoctorId, int pageNumber, int pageSize);
	
	/**
	 * Recuperar una pregunta por su String
	 * 
	 * @param question
	 */
	public void getQuestion(String question);

	// ********************************************************************* MEDICAL
	// TEST

	/**
	 * Añadir una prueba médica a un paciente
	 * 
	 * @param idMedicalTest
	 * @param date
	 * @param time
	 * @param testType      Pudiera llegar a ser: Análisis de sangre, resonancias
	 *                      magnéticas y TAC
	 * @param observations
	 */
	public void addMedicalTest(int id, Date date, long time, MedicalTestType testType, String observations);

	/**
	 * Recuperar una prueba médica por ID
	 * 
	 * @param idMedicalTest
	 */
	public void getMedicalTest(int idPatient);

	/**
	 * Añadir una imagen a una prueba médica
	 * 
	 * @param idMedicalTest
	 * @param image
	 */
	public void addImage(int idMedicalTest, String image);

	/**
	 * Actualizar/Pisar una imagen a una prueba médica
	 * 
	 * @param idMedicalTest
	 * @param image
	 */
	public void updateImage(int idMedicalTest, String image);

	/**
	 * Eliminar una imagen a una prueba médica
	 * 
	 * @param idMedicalTest
	 */
	public void removeImage(int idMedicalTest);

	/**
	 * Listar médicos con una especialidad concreta
	 * 
	 * @param speciality
	 */
	public void findSpecialistDoctorByMedicalSpeciality(MedicalSpecialtyTO speciality);
}