package dst.ass1.jpa.dao.impl;

import dst.ass1.jpa.dao.ILecturerDAO;
import dst.ass1.jpa.model.ICourse;
import dst.ass1.jpa.model.ILecturer;
import dst.ass1.jpa.model.ILesson;
import dst.ass1.jpa.model.impl.Lecturer;
import dst.ass1.jpa.model.impl.Lesson;
import dst.ass1.jpa.util.Constants;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class LecturerDAO extends GenericDAO<Lecturer, ILecturer> implements ILecturerDAO {
    public LecturerDAO(EntityManager em) {
        super(em, Lecturer.class);
    }

    @Override
    public Map<ILecturer, ILesson> findUpcomingLessonForLecturersOfCourse(ICourse course) {
        try {
            Collection<Object[]> res = em.createNamedQuery(Constants.Q_UPCOMING_LESSONS, Object[].class)
                    .setParameter("now", new Date()).setParameter("course", course).getResultList();

            Map<ILecturer, ILesson> ret = new HashMap<>();
            for (Object[] o : res) {
                Lecturer lec = (Lecturer) o[0];
                Lesson les = (Lesson) o[1];
                if (!ret.containsKey(lec)) ret.put(lec, les);
            }
            return ret;
        } catch (NoResultException e) {
            return new HashMap<>();
        }
    }
}
