package com.ejie.ab39a.service;

import com.ejie.x38.dto.JQGridRequestDto;
import java.util.List;
import java.util.Map;

import com.ejie.ab39a.model.AccionesPg;
import com.ejie.ab39a.model.ElementosArbol;
import com.ejie.ab39a.model.ElementosPe;
import com.ejie.ab39a.model.PlanesEstrategicos;

/**
 * ElementosPe.
 * 
 *  
 */

public interface ElementosArbolService {

	/**
	 * Finds a list of rows in the ElementosPe table.
	 *
	 * @param idPE
	 *            Integer id del plan
	 * @param jqGridRequestDto
	 *            JQGridRequestDto jqGridRequestDto
	 * @param version
	 *            Integer version
	 * @return List<ElementosArbol> elementos
	 */

	List<ElementosArbol> findAll(Integer idPE, Integer version, JQGridRequestDto jqGridRequestDto);

	/**
	 * Finds a list of rows in the ElementosPe table.
	 *
	 * @param idPE
	 *            Integer id del plan
	 * @param version
	 *            Integer version
	 * @param jqGridRequestDto
	 *            JQGridRequestDto jqGridRequestDto
	 * @return List<ElementosArbol> elementos
	 */

	Map<String, Object> findAllVersion(Integer idPE, Integer version, JQGridRequestDto jqGridRequestDto);

	/**
	 * Finds a list of rows in the ElementosPe table.
	 *
	 * @param idPE
	 *            Integer id del plan
	 * @param jqGridRequestDto
	 *            JQGridRequestDto jqGridRequestDto
	 * @return List<ElementosArbol> elementos
	 */

	List<ElementosArbol> findAllGestion(Integer idPE, JQGridRequestDto jqGridRequestDto);

	/**
	 * guarda el helburu del elemento
	 * 
	 * @param elem
	 *            ElementosArbol elemento
	 */
	void guardarHelburu(ElementosArbol elem);

	/**
	 * guarda el titulo del elemento
	 * 
	 * @param elem
	 *            ElementosArbol elem
	 */
	void guardarTituloPG(ElementosArbol elem);

	/**
	 * borra el elemento
	 * 
	 * @param idElemento
	 *            Long id del elemento
	 * @param planEstrategico
	 *            PlanesEstrategicos planEstrategico
	 */
	void borrarElemento(Long idElemento, PlanesEstrategicos planEstrategico);

	/**
	 * Crea un elemento nuevo
	 * 
	 * @param elem
	 *            ElementosPe datos del elemento
	 * @return ElementosArbol elemento
	 */
	ElementosArbol elementoNuevo(ElementosPe elem);

	/**
	 * Crea un elemento nuevo
	 * 
	 * @param elem
	 *            ElementosArbol datos del elemento
	 * @param accion
	 *            AccionesPg accion
	 * @return ElementosArbol elemento
	 */
	ElementosArbol elementoNuevoNivel4(ElementosArbol elem, AccionesPg accion);

	/**
	 * Modifica el elemento
	 * 
	 * @param elem
	 *            ElementsoArbol elemento
	 */
	void modificarElemento(ElementosArbol elem);

	/**
	 * edita oharrak
	 * 
	 * @param elemento
	 *            ElementosPe elemento
	 */
	void editarOharrak(ElementosPe elemento);

	/**
	 * mapa con los datos para el arbol del plan estrategico
	 * 
	 * @param plan
	 *            PlanesEstrategicos plan
	 * @param consulta
	 *            Integer consulta
	 * @return Map<String, Object> mapa
	 */
	Map<String, Object> datosArbolPlanE(PlanesEstrategicos plan, Integer consulta);

	/**
	 * Inserta nuevas acciones
	 * 
	 * @param lista
	 *            List<AccionesPg> lista
	 * @param modo
	 *            String tipo de nueva accion, seleccionada o creada
	 * @return List<AccionesPg> lista de acciones
	 */
	List<AccionesPg> insertarNuevasAcciones(List<AccionesPg> lista, String modo);
}