package com.ejie.ab39a.service.client;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ejie.ab39a.exceptions.PlateaServiceException;
import com.ejie.ab39a.model.Entidades;
import com.ejie.ab39a.model.TecnicosEntidad;
import com.ejie.ab39a.parse.MessageParser;
import com.ejie.ab39a.ws.client.rdr.X43AWebService;
import com.ejie.ab39a.ws.client.rdr.schemas.RepresentativeInformationType;

/**
 * 
 *  
 *
 */
@Service(value = "plateaService")
public class PlateaServiceImpl implements PlateaService {

	private static final Logger logger = LoggerFactory.getLogger(PlateaServiceImpl.class);

	@Autowired
	private X43AWebService rdrService;

	/**
	 * Devuelve la lista de entidades en las que trabaja el tecnico
	 * 
	 * @param tecnico
	 *            TecnicosEntidad tecnico
	 * @return List<Entidades> lista de Entidades
	 * @throws PlateaServiceException
	 *             e e
	 */
	public List<Entidades> getEntidadesTrabajaTecnico(TecnicosEntidad tecnico) throws PlateaServiceException {

		PlateaServiceImpl.logger.debug("Entrando en getEntidadesTrabajaTecnico");

		try {
			String datosApoderado = MessageParser.unparse(PlateaUtils.getApoderado(tecnico, Boolean.TRUE));

			String representativeInformation = this.rdrService.representativeInformation(datosApoderado);
			RepresentativeInformationType respuesta = MessageParser.parse(representativeInformation,
					RepresentativeInformationType.class);

			List<Entidades> lista = PlateaUtils.getListaEntidades(respuesta);

			PlateaServiceImpl.logger.debug("Saliendo de getEntidadesTrabajaTecnico:"
					.concat((lista == null || lista.isEmpty() ? "lista vacia" : String.valueOf(lista.size()))));
			return lista;

		} catch (Exception e) {
			PlateaServiceImpl.logger.debug("ERROR: getEntidadesTrabajaTecnico".concat(e.getMessage()));
			PlateaServiceImpl.logger.error("ERROR: getEntidadesTrabajaTecnico", e);
			throw new PlateaServiceException(e.getMessage());
		}
	}
}
