package com.ejie.ab39a.service.client;

import java.util.ArrayList;
import java.util.List;

import com.ejie.ab39a.model.Entidades;
import com.ejie.ab39a.model.TecnicosEntidad;
import com.ejie.ab39a.ws.client.rdr.schemas.ApoderadoInfo;
import com.ejie.ab39a.ws.client.rdr.schemas.ListaPersonasJuridicasType;
import com.ejie.ab39a.ws.client.rdr.schemas.ListaPoderdantesType;
import com.ejie.ab39a.ws.client.rdr.schemas.ListaTercerosDeConfianza;
import com.ejie.ab39a.ws.client.rdr.schemas.PersonaJuridicaType;
import com.ejie.ab39a.ws.client.rdr.schemas.PoderdanteType;
import com.ejie.ab39a.ws.client.rdr.schemas.RepresentativeInformationType;
import com.ejie.ab39a.ws.client.rdr.schemas.TerceroDeConfianzaType;

/**
 * 
 *  
 *
 */
public class PlateaUtils {

    /**
     * Constructor por defecto privado
     */
    private PlateaUtils() {
        super();
    }

    /**
     * Devuelve un Apoderado a partir de un tecnico de entidad
     * 
     * @param tecnico
     *            TecnicosEntidad tecnico
     * @param soloVigente
     *            boolean soloVigente
     * @return ApoderadoInfoType ApoderadoInfoType
     */
    public static ApoderadoInfo getApoderado(TecnicosEntidad tecnico, boolean soloVigente) {
        ApoderadoInfo apoderado = new ApoderadoInfo();
        apoderado.setIdApoderado(tecnico.getDocidentificacion());
        apoderado.setSoloVigente(soloVigente);

        return apoderado;
    }

    /**
     * get Lista Entidades
     * 
     * @param respuesta
     *            RepresentativeInformationType respuesta
     * @return List<Entidades> lista de Entidades en las que trabaja
     */
    public static List<Entidades> getListaEntidades(RepresentativeInformationType respuesta) {

        List<Entidades> lista = new ArrayList<Entidades>();
        if (respuesta != null) {

            ListaPersonasJuridicasType listaEmpresas = respuesta.getListaPersonasJuridicas();
            if (listaEmpresas != null && listaEmpresas.getPersonaJuridica() != null
                    && !listaEmpresas.getPersonaJuridica().isEmpty()) {
                Entidades ent = null;

                for (PersonaJuridicaType empresaJuridica : listaEmpresas.getPersonaJuridica()) {
                    ent = new Entidades();
                    ent.setCifnif(empresaJuridica.getIdPersonaJuridica());
                    ent.setDesentidad(empresaJuridica.getRazonSocial());
                    lista.add(ent);

                    // Recupero la lista de poderdantes de la persona juridica
                    ListaPoderdantesType listaPoderDantes = empresaJuridica.getListaPoderdantes();
                    if (listaPoderDantes != null && listaPoderDantes.getPoderdante() != null
                            && !listaPoderDantes.getPoderdante().isEmpty()) {
                        for (PoderdanteType poder : listaPoderDantes.getPoderdante()) {
                            ent = new Entidades();
                            ent.setCifnif(poder.getIdPoderdante());
                            ent.setDesentidad(poder.getNombrePoderdante());
                            lista.add(ent);
                        }
                    }
                }
            }

            // Terceros de confianza
            // ListaTercerosDeConfianza listaEmpresasTerceros =
            // respuesta.getListaTercerosDeConfianza();
            // if (listaEmpresasTerceros != null && listaEmpresasTerceros.getTerceroDeConfianza() !=
            // null
            // && !listaEmpresasTerceros.getTerceroDeConfianza().isEmpty()) {
            // Entidades ent = null;
            // for (TerceroDeConfianzaType terceroConfianza :
            // listaEmpresasTerceros.getTerceroDeConfianza()) {
            // ent = new Entidades();
            // ent.setCifnif(terceroConfianza.getIdTerceroDeConfianza());
            // ent.setDesentidad(terceroConfianza.getRazonSocial());
            // lista.add(ent);
            // }
            // }

            // // // Poder dantes (dni y cif) ¿recuperar para cada persona las entidades a las que
            // // representa?
            ListaPoderdantesType listaPoderDantes = respuesta.getListaPoderdantes();
            if (listaPoderDantes != null && listaPoderDantes.getPoderdante() != null
                    && !listaPoderDantes.getPoderdante().isEmpty()) {
                Entidades ent = null;
                for (PoderdanteType poder : listaPoderDantes.getPoderdante()) {
                    ent = new Entidades();
                    ent.setCifnif(poder.getIdPoderdante());
                    ent.setDesentidad(poder.getNombrePoderdante());
                    lista.add(ent);
                }
            }

        }

        return lista;

    }

}