package ve.gob.cnti.receiver.ejb;

import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.logging.Logger;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;

import ve.gob.cnti.receiver.mail.IMail;
import ve.gob.cnti.receiver.mail.Mailer;
import ve.gob.cnti.receiver.utils.IMapMessageConverter;
import ve.gob.cnti.receiver.utils.IPropertiesReader;
import ve.gob.cnti.receiver.utils.MapMessageConverter;
import ve.gob.cnti.receiver.utils.PropertiesReader;


/**
 * Message-Driven Bean implementation class for: ReceiverNotificacion
 */
@MessageDriven(
		activationConfig = { @ActivationConfigProperty(
				propertyName = "destination", propertyValue = "jms/queue/notificacion"), @ActivationConfigProperty(
				propertyName = "destinationType", propertyValue = "javax.jms.Queue")
		}, 
		mappedName = "jms/queue/notificacion")
public class ReceiverNotificacion implements MessageListener {
	
	private static final Logger log = Logger.getLogger(ReceiverNotificacion.class.getName());
    /**
     * Default constructor. 
     */
    public ReceiverNotificacion() {
        // TODO Auto-generated constructor stub
    }
	
	/**
     * @see MessageListener#onMessage(Message)
     */
    public void onMessage(Message message) {
        // TODO Auto-generated method stub
    	MapMessage incoming = (MapMessage)message;
    	IMapMessageConverter mapConverter=new MapMessageConverter();
    	Map<String,String> map=mapConverter.converMapMessageToMap(incoming);
		IMail mail=new Mailer();
		IPropertiesReader properties=new PropertiesReader("templatesistema");
		String TEMPLATE_SUBJECT_NOTIFICACION = null;
	    String TEMPLATE_BODY_NOTIFICACION = null;
	    if(map.get("respuesta").equals("Aprobado")){
			if(map.get("tipo").equals("cita")){
				TEMPLATE_SUBJECT_NOTIFICACION = properties.getProperty("TEMPLATE_SUBJECT_RESPUESTA_CITA");
			    TEMPLATE_BODY_NOTIFICACION = properties.getProperty("TEMPLATE_BODY_RESPUESTA_CITA");			
			}else{
				 TEMPLATE_SUBJECT_NOTIFICACION = properties.getProperty("TEMPLATE_SUBJECT_RESPUESTA_DOC");
				 TEMPLATE_BODY_NOTIFICACION = properties.getProperty("TEMPLATE_BODY_RESPUESTA_DOC");
			}	
	    }else{
	    	TEMPLATE_SUBJECT_NOTIFICACION = properties.getProperty("TEMPLATE_SUBJECT_RESPUESTA_NOTI");
			TEMPLATE_BODY_NOTIFICACION = properties.getProperty("TEMPLATE_BODY_RESPUESTA_NOTI");
	    }
	    
	    byte[] arr=null;
		try {
			arr = TEMPLATE_SUBJECT_NOTIFICACION.getBytes("UTF-8");
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		TEMPLATE_SUBJECT_NOTIFICACION= new String(arr);    	
   
	    
		mail.setSubject(TEMPLATE_SUBJECT_NOTIFICACION.
				replace("${tramite}", map.get("tramite")).
				replace("${processDescription}", map.get("processDescription")));
			
		TEMPLATE_BODY_NOTIFICACION=TEMPLATE_BODY_NOTIFICACION.replace("${tramite}",map.get("tramite"));		
		TEMPLATE_BODY_NOTIFICACION=TEMPLATE_BODY_NOTIFICACION.replace("${cedula}",map.get("cedula"));
		TEMPLATE_BODY_NOTIFICACION=TEMPLATE_BODY_NOTIFICACION.replace("${taskDescription}",map.get("taskDescription"));
		TEMPLATE_BODY_NOTIFICACION=TEMPLATE_BODY_NOTIFICACION.replace("${processDescription}",map.get("processDescription"));		
		TEMPLATE_BODY_NOTIFICACION=TEMPLATE_BODY_NOTIFICACION.replace("${nombre}",map.get("nombre"));		
		TEMPLATE_BODY_NOTIFICACION=TEMPLATE_BODY_NOTIFICACION.replace("${f_solicitud}",map.get("fechaSolicitud"));
		TEMPLATE_BODY_NOTIFICACION=TEMPLATE_BODY_NOTIFICACION.replace("${revision}",map.get("revision"));
		//TEMPLATE_BODY_NOTIFICACION=TEMPLATE_BODY_NOTIFICACION.replace("${notificacion}",map.get("notificacion"));
		if(map.get("respuesta").equals("Aprobado")){
			if(map.get("tipo").equals("cita")){
				TEMPLATE_BODY_NOTIFICACION=TEMPLATE_BODY_NOTIFICACION.replace("${f_cita}", map.get("f_cita"));
			}/*else{
				try {
					mail.setReceiveFile(incoming.getBytes("Bytes_FILE_Planilla"));
					mail.setFileName(map.get("_FILE_Planilla_Nombre"));
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}			
			}*/	
		}else{
			log.info("paso notificacin");
			TEMPLATE_BODY_NOTIFICACION=TEMPLATE_BODY_NOTIFICACION.replace("${notificacion}",map.get("notificacion"));
		}
		
	 	try {
			arr = TEMPLATE_BODY_NOTIFICACION.getBytes("UTF-8");
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
    	TEMPLATE_BODY_NOTIFICACION= new String(arr); 
		
		
		mail.setBody(TEMPLATE_BODY_NOTIFICACION);		
		mail.setToAddress(map.get("email"));
		
		mail.send();
        
    }

}
