package br.com.senai.stayFilm.dao.implementation;

import java.sql.SQLException;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import br.com.senai.stayFilm.dao.GenericDao;
import br.com.senai.stayFilm.model.Atividade;
import br.com.senai.stayFilm.model.Avaliacao;
import br.com.senai.stayFilm.model.Colaborador;

/**
 * 23/10/2016
 * 
 * @author Equipe Stayfilm Classe utilizada para a persistncia dos dados do
 *         Atividade.
 */

@Repository
public class AtividadeDao implements GenericDao<Atividade> {

	@PersistenceContext
	private EntityManager manager;

	/**
	 * Inserir as atividades do colaborador
	 */
	@Transactional
	@Override
	public void insertWithKey(Atividade atividade, long idColaborador) {
		Colaborador colaborador = manager.find(Colaborador.class, idColaborador);
		atividade.setColaborador(colaborador);
		manager.persist(atividade);

	}

	/**
	 * Esse metodo e responsaver por listar todas as atividades de um colaborador
	 */
	@Override
	public List<Atividade> listar(long idColaborador) { 
		return manager.createQuery("select a where a.colaborador.idColaborador = "+  idColaborador).getResultList();
	}	


	/**
	 * Esse metodo e responsavel por preencher os campos de uma determinada atividade 
	 * transicao entre a lista das atividades e a acao de alterar
	 */
	@Override
	public Atividade buscarPorId(Long idAtividade) {
		return manager.find(Atividade.class, idAtividade);
	}

	
	/**
	 * Metodo para editar os dados da atividade do colaborador
	 */
	@Transactional
	@Override
	public Atividade updateWithKey(Atividade atividade, long idColaborador) throws SQLException {
		Colaborador colaborador = manager.find(Colaborador.class, idColaborador);
		atividade.setColaborador(colaborador);
		return manager.merge(atividade);
	}
	

	/**
	 * Metodo responsaver por remover atividade de um colaborador
	 */
	@Transactional
	@Override
	public void delete(Long idAtividade) throws SQLException {
		Atividade atividade = manager.find(Atividade.class, idAtividade);
		manager.remove(atividade);

	}

	
	
	
	@Override
	public void insert(Atividade atividade) throws SQLException {
		// NOT USE

	}
	

	@Override
	public Atividade update(Atividade atividade) throws SQLException {
		// NOT USE
		return null;
	}


	/**
	 * Metodo implementado porem nao utilizado
	 */
	@Override
	public Atividade search(Long idAtividade) {
		return manager.find(Atividade.class, idAtividade);
	}


	@Override
	public void insert(Avaliacao avaliacao, Long idColaborador, Long idResposta) {
		// NOT USE
		
	}

	@Override
	public List<Colaborador> listarTodos() {
		//NOT USE
		return null;
	}

	@Override
	public void insert(Avaliacao avaliacao, Long idColaborador, Long idResposta, Long filme) {
		// TODO Auto-generated method stub
		
	}

	

}

@@ -182,16 +182,53 @@
 Context;
+%0Aimport javax.persistence.TypedQuery;
 %0A%0Aimport
@@ -1236,65 +1236,194 @@
  %0A%09%09
-return manager.createQuery(%22select a where a.colaborador.
+String hql=%22select a from Atividade a where a.colaborador.idColaborador=:idColaborador%22;%0A%09%09 TypedQuery%3CAtividade%3E query= manager.createQuery(hql,Atividade.class);%0A%09%09 query.setParameter(%22
 idCo
@@ -1435,14 +1435,10 @@
 ador
- = %22+ 
+%22,
  idC
@@ -1448,16 +1448,33 @@
 borador)
+;%0A%09%09 return query
 .getResu
@@ -1483,16 +1483,20 @@
 List();%0A
+%09%09 %0A
 %09%7D%09%0A%0A%0A%09/

fix atividade listar