package dk.dtu.compute.se2.web.fourth.eaos;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

import dk.dtu.compute.se2.web.fourth.dto.Event;
import dk.dtu.compute.se2.web.fourth.entities.EventEntity;
import dk.dtu.compute.se2.web.fourth.entities.Sensor;
import dk.dtu.compute.se2.web.fourth.services.EventServices;


@LocalBean
@Stateless
public class SensorDataEAO {
	
	@PersistenceContext(unitName = "dk.dtu.compute.se2.web.fifth.persistence-unit")
	EntityManager em;

	public EventEntity addEvent(float value, int id) {

		Sensor sensor = em.find(Sensor.class, id);
		if (sensor == null) {
			sensor = new Sensor();
			sensor.setId(id);
			em.persist(sensor);
		}

		EventEntity event = new EventEntity();
		event.setSensor(sensor);
		event.setValue(value);
		long time = System.currentTimeMillis();
		event.setTime(time);
		em.persist(event);
		em.flush(); // NEEDED for updating the automatically assigned id to the event entity
		return event;
	}
	

        // public List<EventEntity> getEventlist(int id) {

	// ...

        // }

	
	final private static String querytext =
		"SELECT e " +
		"FROM EventEntity e, Sensor s " +
		"WHERE " + 
		  "s.id = :id " +
		"AND " +
		  "e.sensor = s " +
		"AND " +
		  "e.time >  :time " +
		"ORDER BY e.time ASC";
	
	// Note: In JPA, you can also define @NamedQueries -- just not here.
	
	public List<EventEntity> getEventlist(int id, int time) {		
		TypedQuery<EventEntity> query = em.createQuery(querytext, EventEntity.class);
		query.setParameter("id", id);
		query.setParameter("time", System.currentTimeMillis() - time);
		List<EventEntity> result = query.getResultList();

		if (result != null) {
			return result;
		} else {
			return Collections.emptyList();
		}
	}

	// ...

}
