package fr.tutoriel.kafka.receiver;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;

import fr.tutoriel.kafka.dto.Person;


/**
 * Receveur Kafka
 *
 */
@Service
public class KafkaReceiver implements IReceiver {
	
	@Autowired 
	private IProcess process; // Affectation de l'instance pour la gestion des traitements
		
	/**
	 * Ecoute sur le topic "Tuto1", s'il existe un message
	 * 
	 * @param person
	 * 		Objet reçu
	 */
	@KafkaListener(topics = "Tuto1",containerFactory="kafkaListenerContainerFactory")
	public void listenTuto1(Person person) {
		listen("Tuto1",person);	
	}

	/**
	 * Ecoute sur le topic "Tuto2", s'il existe un message

	 * @param person
	 * 		Objet reçu
	 */
	@KafkaListener(topics = "Tuto2",containerFactory="kafkaListenerContainerFactory")
	public void listenTuto2(Person person) {
		listen("Tuto2",person);	
	}
	
	/**
	 * 	 
	 * Exécution d'un traitement
	 * @param topicName
	 * 		Nom du topic
	 * @param topicName
	 * 	    Objet reçu
	 * 
	 */
	@Override
	public void listen(String topicName, Person person) {
		process.execute(topicName+"Info", person);	
	}
}