package com.ejie.ab39a.model;

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

import com.ejie.ab39a.constantes.Constantes;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.gfi.utils.Utilities;

/**
 * Entidades.
 * 
 *  
 */

public class Entidades implements java.io.Serializable {

    private static final long serialVersionUID = 1L;
    private Integer codentidad;
    private TecnicosEntidad tecnicosEntidad;
    private String desentidad;
    private String cifnif;
    private String codth;
    private String codmun;
    private String codloc;
    private String direccion;
    private List<PlanesEstrategicos> planesEstrategicoses = new ArrayList<PlanesEstrategicos>();
    private String email;
    private Integer numCalle;
    private Integer numTrabajadores;
    private Integer numTrabHombre;
    private Integer numTrabMujer;
    private String tfno;
    private String cp;
    private Integer tipoEntidad;
    private TiposIdentif tipoIdentif;
    private Integer solicInfor;

    private Integer baja = Constantes.ALTA_LOGICA;
    private String descTh;
    private String descMun;
    private String localidad;
    private String muniExt;
    private String locaExt;

    private boolean datosCompletos;

    private Integer numplanesEs;

    public Integer getNumplanesEs() {
        return numplanesEs;
    }

    public void setNumplanesEs(Integer numplanesEs) {
        this.numplanesEs = numplanesEs;
    }

    /**
     * Method 'Entidades'.
     */
    public Entidades() {
        super();
    }

    /**
     * Method 'Entidades'.
     * 
     * @param codentidad
     *            Integer codentidad
     */
    public Entidades(Integer codentidad) {
        super();
        this.codentidad = codentidad;
    }

    /**
     * Method 'Entidades'.
     * 
     * @param codentidad
     *            Integer codentidad
     * @param desentidad
     *            String desentidad
     * @param cifnif
     *            String cifnif
     * @param codth
     *            String codth
     * @param codmun
     *            String codmun
     * @param direccion
     *            String direccion
     * @param tecnicosEntidad
     *            TecnicosEntidad tecnicosEntidad
     * @param solicInfor
     *            Integer solicInfor
     */
    public Entidades(Integer codentidad, String desentidad, String cifnif, String codth, String codmun,
            String direccion, TecnicosEntidad tecnicosEntidad, Integer solicInfor) {
        super();
        this.codentidad = codentidad;
        this.tecnicosEntidad = tecnicosEntidad;
        this.desentidad = desentidad;
        this.cifnif = cifnif;
        this.codth = codth;
        this.codmun = codmun;
        this.direccion = direccion;
        this.solicInfor = solicInfor;
    }

    /**
     * Method 'Entidades'.
     * 
     * @param codentidad
     *            Integer codentidad
     * @param desentidad
     *            String desentidad
     * @param cifnif
     *            String cifnif
     * @param codth
     *            String codth
     * @param codmun
     *            String codmun
     * @param direccion
     *            String direccion
     * @param tecnicosEntidad
     *            TecnicosEntidad tecnicosEntidad
     * @param planesEstrategicoses
     *            List<PlanesEstrategicos> planesEstrategicoses
     */
    public Entidades(Integer codentidad, String desentidad, String cifnif, String codth, String codmun,
            String direccion, TecnicosEntidad tecnicosEntidad, List<PlanesEstrategicos> planesEstrategicoses) {
        super();

        this.codentidad = codentidad;
        this.tecnicosEntidad = tecnicosEntidad;
        this.desentidad = desentidad;
        this.cifnif = cifnif;
        this.codth = codth;
        this.codmun = codmun;
        this.direccion = direccion;
        this.planesEstrategicoses = planesEstrategicoses;

    }

    /**
     * Method 'Entidades'.
     * 
     * @param codentidad
     *            Integer codentidad
     * @param desentidad
     *            String desentidad
     * @param cifnif
     *            String cifnif
     * @param codth
     *            String codth
     * @param codmun
     *            String codmun
     * @param direccion
     *            String direccion
     * @param email
     *            String email
     * @param numCalle
     *            Integer numCalle
     * @param numTrabajadores
     *            Integer numTrabajadores
     * @param numTrabHombre
     *            Integer numTrabHombre
     * @param numTrabMujer
     *            Integer numTrabMujer
     * @param tfno
     *            Integer tfno
     * @param cp
     *            Integer cp
     * @param tipoEntidad
     *            Integer tipoEntidad
     * @param baja
     *            Integer baja
     * @param descTh
     *            String descTh
     * @param descMun
     *            String descMun
     * @param tecnicosEntidad
     *            TecnicosEntidad tecnicosEntidad
     * @param solicInfor
     *            Integer solicInfor
     */
    public Entidades(Integer codentidad, String desentidad, String cifnif, String codth, String codmun,
            String direccion, String email, Integer numCalle, Integer numTrabajadores, Integer numTrabHombre,
            Integer numTrabMujer, String tfno, String cp, Integer tipoEntidad, Integer baja, String descTh,
            String descMun, TecnicosEntidad tecnicosEntidad, Integer solicInfor, String muniEx, String locaExt) {
        super();
        this.tecnicosEntidad = tecnicosEntidad;
        this.desentidad = desentidad;
        this.codentidad = codentidad;
        this.cifnif = cifnif;
        this.codth = codth;
        this.codmun = codmun;
        this.direccion = direccion;
        this.email = email;
        this.numCalle = numCalle;
        this.tfno = tfno;
        this.cp = cp;
        this.tipoEntidad = tipoEntidad;
        this.baja = baja;
        this.descTh = descTh;
        this.descMun = descMun;
        this.solicInfor = solicInfor;
        this.numTrabajadores = numTrabajadores;
        this.numTrabHombre = numTrabHombre;
        this.numTrabMujer = numTrabMujer;
        this.muniExt = muniEx;
        this.locaExt = locaExt;

    }

    /**
     * Method 'Entidades'.
     * 
     * @param codentidad
     *            Integer codentidad
     * @param desentidad
     *            String desentidad
     * @param cifnif
     *            String cifnif
     * @param codth
     *            String codth
     * @param codmun
     *            String codmun
     * @param direccion
     *            String direccion
     * @param email
     *            String email
     * @param numCalle
     *            Integer numCalle
     * @param numTrabajadores
     *            Integer numTrabajadores
     * @param numTrabHombre
     *            Integer numTrabHombre
     * @param numTrabMujer
     *            Integer numTrabMujer
     * @param tfno
     *            Integer tfno
     * @param cp
     *            Integer cp
     * @param tipoEntidad
     *            Integer tipoEntidad
     * @param baja
     *            Integer baja
     * @param tecnicosEntidad
     *            TecnicosEntidad tecnicosEntidad
     * @param solicInfor
     *            Integer solicInfor
     */

    public Entidades(Integer codentidad, String desentidad, String cifnif, String codth, String codmun,
            String direccion, String email, Integer numCalle, Integer numTrabajadores, Integer numTrabHombre,
            Integer numTrabMujer, String tfno, String cp, Integer tipoEntidad, Integer baja,
            TecnicosEntidad tecnicosEntidad, Integer solicInfor, String localidad, String muniEx, String locaExt) {
        super();
        this.numTrabajadores = numTrabajadores;
        this.numTrabHombre = numTrabHombre;
        this.numTrabMujer = numTrabMujer;
        this.tecnicosEntidad = tecnicosEntidad;
        this.cifnif = cifnif;
        this.codth = codth;
        this.codmun = codmun;
        this.direccion = direccion;
        this.email = email;
        this.numCalle = numCalle;
        this.solicInfor = solicInfor;
        this.tfno = tfno;
        this.cp = cp;
        this.tipoEntidad = tipoEntidad;
        this.baja = baja;
        this.codentidad = codentidad;
        this.desentidad = desentidad;
        this.codloc = localidad;
        this.muniExt = muniEx;
        this.locaExt = locaExt;
    }

    /**
     * Method 'Entidades'.
     * 
     * @param codentidad
     *            Integer codentidad
     * @param desentidad
     *            String desentidad
     * @param cifnif
     *            String cifnif
     * @param codth
     *            String codth
     * @param codmun
     *            String codmun
     * @param direccion
     *            String direccion
     * @param email
     *            String email
     * @param numCalle
     *            Integer numCalle
     * @param numTrabajadores
     *            Integer numTrabajadores
     * @param numTrabHombre
     *            Integer numTrabHombre
     * @param numTrabMujer
     *            Integer numTrabMujer
     * @param tfno
     *            Integer tfno
     * @param cp
     *            Integer cp
     * @param tipoEntidad
     *            Integer tipoEntidad
     * @param baja
     *            Integer baja
     * @param tipoIdentif
     *            TiposIdentif tipoIdentif
     * @param solicInfor
     *            Integer solicInfor
     * @param localidad
     *            String localidad
     */

    public Entidades(Integer codentidad, String desentidad, String cifnif, String codth, String codmun,
            String direccion, String email, Integer numCalle, Integer numTrabajadores, Integer numTrabHombre,
            Integer numTrabMujer, String tfno, String cp, Integer tipoEntidad, Integer baja, TiposIdentif tipoIdentif,
            Integer solicInfor, String localidad, String muniEx, String locaExt) {
        super();
        this.codentidad = codentidad;
        this.tipoIdentif = tipoIdentif;
        this.tipoEntidad = tipoEntidad;
        this.cifnif = cifnif;
        this.codth = codth;
        this.tfno = tfno;
        this.codmun = codmun;
        this.direccion = direccion;
        this.email = email;
        this.numCalle = numCalle;
        this.numTrabajadores = numTrabajadores;
        this.numTrabHombre = numTrabHombre;
        this.numTrabMujer = numTrabMujer;
        this.desentidad = desentidad;
        this.cp = cp;
        this.baja = baja;
        this.solicInfor = solicInfor;
        this.codloc = localidad;
        this.muniExt = muniEx;
        this.locaExt = locaExt;
    }

    /**
     * Method 'Entidades'.
     * 
     * @param codentidad
     *            Integer codentidad
     * @param tecnicosEntidad
     *            TecnicosEntidad tecnicosEntidad
     * @param desentidad
     *            String desentidad
     * @param cifnif
     *            String cifnif
     * @param codth
     *            String codth
     * @param codmun
     *            String codmun
     * @param direccion
     *            String direccion
     * @param planesEstrategicoses
     *            List<PlanesEstrategicos> planesEstrategicoses
     * @param email
     *            String email
     * @param numCalle
     *            Integer numCalle
     * @param numTrabajadores
     *            Integer numTrabajadores
     * @param numTrabHombre
     *            Integer numTrabHombre
     * @param numTrabMujer
     *            Integer numTrabMujer
     * @param tfno
     *            String tfno
     * @param cp
     *            String cp
     * @param tipoEntidad
     *            Integer tipoEntidad
     * @param baja
     *            Integer baja
     */
    public Entidades(Integer codentidad, TecnicosEntidad tecnicosEntidad, String desentidad, String cifnif,
            String codth, String codmun, String direccion, List<PlanesEstrategicos> planesEstrategicoses, String email,
            Integer numCalle, Integer numTrabajadores, Integer numTrabHombre, Integer numTrabMujer, String tfno,
            String cp, Integer tipoEntidad, Integer baja) {
        super();
        this.direccion = direccion;
        this.planesEstrategicoses = planesEstrategicoses;
        this.tecnicosEntidad = tecnicosEntidad;
        this.desentidad = desentidad;
        this.cifnif = cifnif;
        this.codth = codth;
        this.codmun = codmun;
        this.email = email;
        this.numCalle = numCalle;
        this.numTrabajadores = numTrabajadores;
        this.numTrabHombre = numTrabHombre;
        this.codentidad = codentidad;
        this.numTrabMujer = numTrabMujer;
        this.tfno = tfno;
        this.cp = cp;
        this.tipoEntidad = tipoEntidad;
        this.baja = baja;
        this.desentidad = desentidad;
        this.cifnif = cifnif;
    }

    /**
     * Method 'Entidades'.
     * 
     * @param codentidad
     *            Integer codentidad
     * @param desentidad
     *            String desentidad
     * @param cifnif
     *            String cifnif
     * @param codth
     *            String codth
     * @param codmun
     *            String codmun
     * @param direccion
     *            String direccion
     * @param email
     *            String email
     * @param numCalle
     *            Integer numCalle
     * @param numTrabajadores
     *            Integer numTrabajadores
     * @param numTrabHombre
     *            Integer numTrabHombre
     * @param numTrabMujer
     *            Integer numTrabMujer
     * @param tfno
     *            Integer tfno
     * @param cp
     *            Integer cp
     * @param tipoEntidad
     *            Integer tipoEntidad
     * @param baja
     *            Integer baja
     * @param descTh
     *            String descTh
     * @param descMun
     *            String descMun
     * @param tecnicosEntidad
     *            TecnicosEntidad tecnicosEntidad
     * @param tipoIdentif
     *            TipoIdentif tipoIdentif
     * @param planesEstrategicoses
     *            List<PlanesEstrategicos> planesEstrategicoses
     */
    public Entidades(Integer codentidad, TecnicosEntidad tecnicosEntidad, String desentidad, String cifnif,
            String codth, String codmun, String direccion, List<PlanesEstrategicos> planesEstrategicoses, String email,
            Integer numCalle, Integer numTrabajadores, Integer numTrabHombre, Integer numTrabMujer, String tfno,
            String cp, Integer tipoEntidad, TiposIdentif tipoIdentif, Integer baja, String descTh, String descMun) {
        super();

        this.desentidad = desentidad;
        this.numTrabajadores = numTrabajadores;
        this.numTrabHombre = numTrabHombre;
        this.numTrabMujer = numTrabMujer;
        this.cifnif = cifnif;
        this.codth = codth;
        this.codmun = codmun;
        this.direccion = direccion;
        this.planesEstrategicoses = planesEstrategicoses;
        this.email = email;
        this.numCalle = numCalle;
        this.tfno = tfno;
        this.cp = cp;
        this.descTh = descTh;
        this.descMun = descMun;
        this.tipoEntidad = tipoEntidad;
        this.tipoIdentif = tipoIdentif;
        this.baja = baja;
        this.codentidad = codentidad;
        this.tecnicosEntidad = tecnicosEntidad;

    }

    /**
     * Method 'getCodentidad'.
     *
     * @return Integer
     */

    public Integer getCodentidad() {
        return this.codentidad;
    }

    /**
     * Method 'setCodentidad'.
     *
     * @param codentidad
     *            Integer
     */

    public void setCodentidad(Integer codentidad) {
        this.codentidad = codentidad;
    }

    /**
     * Method 'getTecnicosEntidad'.
     *
     * @return TecnicosEntidad
     */

    public TecnicosEntidad getTecnicosEntidad() {
        return this.tecnicosEntidad;
    }

    /**
     * Method 'setTecnicosEntidad'.
     *
     * @param tecnicosEntidad
     *            TecnicosEntidad
     */

    public void setTecnicosEntidad(TecnicosEntidad tecnicosEntidad) {
        this.tecnicosEntidad = tecnicosEntidad;
    }

    /**
     * Method 'getDesentidad'.
     *
     * @return String
     */

    public String getDesentidad() {
        return this.desentidad;
    }

    /**
     * Method 'setDesentidad'.
     *
     * @param desentidad
     *            String
     */

    public void setDesentidad(String desentidad) {
        this.desentidad = desentidad;
    }

    /**
     * Method 'getCifnif'.
     *
     * @return String
     */

    public String getCifnif() {
        return this.cifnif;
    }

    /**
     * Method 'setCifnif'.
     *
     * @param cifnif
     *            String
     */

    public void setCifnif(String cifnif) {
        this.cifnif = cifnif;
    }

    /**
     * Method 'getCodth'.
     *
     * @return String
     */

    public String getCodth() {
        return this.codth;
    }

    /**
     * Method 'setCodth'.
     *
     * @param codth
     *            String
     */

    public void setCodth(String codth) {
        this.codth = codth;
    }

    /**
     * Method 'getCodmun'.
     *
     * @return String
     */

    public String getCodmun() {
        return this.codmun;
    }

    /**
     * Method 'setCodmun'.
     *
     * @param codmun
     *            String
     */

    public void setCodmun(String codmun) {
        this.codmun = codmun;
    }

    /**
     * Method 'getDireccion'.
     *
     * @return String
     */

    public String getDireccion() {
        return this.direccion;
    }

    /**
     * Method 'setDireccion'.
     *
     * @param direccion
     *            String
     */

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    /**
     * Method 'getPlanesEstrategicoses'.
     *
     * @return List
     */
    @JsonIgnore
    public List<PlanesEstrategicos> getPlanesEstrategicoses() {
        return this.planesEstrategicoses;
    }

    /**
     * Method 'setPlanesEstrategicoses'.
     *
     * @param planesEstrategicoses
     *            List
     */
    public void setPlanesEstrategicoses(List<PlanesEstrategicos> planesEstrategicoses) {
        this.planesEstrategicoses = planesEstrategicoses;
    }

    /**
     * 
     * @return String
     */
    public String getEmail() {
        return email;
    }

    /**
     * 
     * @param email
     *            String
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * 
     * @return Integer
     */
    public Integer getNumCalle() {
        return numCalle;
    }

    /**
     * 
     * @param numCalle
     *            Integer
     */
    public void setNumCalle(Integer numCalle) {
        this.numCalle = numCalle;
    }

    /**
     * 
     * @return Integer
     */
    public Integer getNumTrabajadores() {
        return numTrabajadores;
    }

    /**
     * 
     * @param numTrabajadores
     *            Integer
     */
    public void setNumTrabajadores(Integer numTrabajadores) {
        this.numTrabajadores = numTrabajadores;
    }

    /**
     * 
     * @return Integer
     */
    public Integer getNumTrabHombre() {
        return numTrabHombre;
    }

    /**
     * 
     * @param numTrabHombre
     *            Integer
     */
    public void setNumTrabHombre(Integer numTrabHombre) {
        this.numTrabHombre = numTrabHombre;
    }

    /**
     * 
     * @return Integer
     */
    public Integer getNumTrabMujer() {
        return numTrabMujer;
    }

    /**
     * 
     * @param numTrabMujer
     *            Integer
     */
    public void setNumTrabMujer(Integer numTrabMujer) {
        this.numTrabMujer = numTrabMujer;
    }

    /**
     * 
     * @return String
     */
    public String getTfno() {
        return tfno;
    }

    /**
     * 
     * @param tfno
     *            String
     */
    public void setTfno(String tfno) {
        this.tfno = tfno;
    }

    /**
     * 
     * @return String
     */
    public String getCp() {
        return cp;
    }

    /**
     * 
     * @param cp
     *            String
     */
    public void setCp(String cp) {
        this.cp = cp;
    }

    /**
     * 
     * @return Integer
     */
    public Integer getTipoEntidad() {
        return tipoEntidad;
    }

    /**
     * 
     * @param tipoEntidad
     *            Integer
     */
    public void setTipoEntidad(Integer tipoEntidad) {
        this.tipoEntidad = tipoEntidad;
    }

    /**
     * 
     * @return Integer
     */
    public Integer getBaja() {
        return baja;
    }

    /**
     * 
     * @param baja
     *            Integer
     */
    public void setBaja(Integer baja) {
        this.baja = baja;
    }

    /**
     * 
     * @return String
     */
    public String getDescTh() {
        return descTh;
    }

    /**
     * 
     * @param descTh
     *            String
     */
    public void setDescTh(String descTh) {
        this.descTh = descTh;
    }

    /**
     * 
     * @return String
     */
    public String getDescMun() {
        return descMun;
    }

    /**
     * 
     * @param descMun
     *            String
     */
    public void setDescMun(String descMun) {
        this.descMun = descMun;
    }

    /**
     * 
     * @return TiposIdentif
     */
    public TiposIdentif getTipoIdentif() {
        return tipoIdentif;
    }

    /**
     * 
     * @param tipoIdentif
     *            TiposIdentif tipoIdentif
     */
    public void setTipoIdentif(TiposIdentif tipoIdentif) {
        this.tipoIdentif = tipoIdentif;
    }

    /**
     * @return the datosCompletos
     */
    public boolean isDatosCompletos() {
        return datosCompletos;
    }

    /**
     * @param datosCompletos
     *            the datosCompletos to set
     */
    public void setDatosCompletos(boolean datosCompletos) {
        this.datosCompletos = datosCompletos;
    }

    /**
     * Método que devuelve la dirección completa
     * 
     * @return String
     */
    public String getDireccioncompleta() {

        StringBuilder direccionCompleta = new StringBuilder(Constantes.VACIO);

        if (!Utilities.isEmpty(this.getDireccion())) {
            direccionCompleta.append(this.getDireccion());

            if (!Utilities.isEmptyNumber(this.getNumCalle())) {
                direccionCompleta.append(Constantes.ESPACIO).append(this.getNumCalle());
            }

            if (!Utilities.isEmptyNumber(this.getCp())) {
                direccionCompleta.append(Constantes.ESPACIO).append(this.getCp());
            }

            if (!Utilities.isEmptyNumber(this.getDescMun())) {
                direccionCompleta.append(Constantes.ESPACIO).append(this.getDescMun());
            }

            if (!Utilities.isEmptyNumber(this.getDescTh())) {
                direccionCompleta.append(Constantes.ESPACIO).append(this.getDescTh());
            }

        }

        return direccionCompleta.toString();
    }

    /**
     * Intended only for logging and debugging.
     * 
     * Here, the contents of every main field are placed into the result.
     * 
     * @return String
     */
    @Override
    public String toString() {
        StringBuilder result = new StringBuilder();
        result.append(this.getClass().getName()).append(" Object { ");
        result.append(" [ codentidad: ").append(this.codentidad).append(" ]");
        result.append(", [ desentidad: ").append(this.desentidad).append(" ]");
        result.append(", [ cifnif: ").append(this.cifnif).append(" ]");
        result.append(", [ codth: ").append(this.codth).append(" ]");
        result.append(", [ codmun: ").append(this.codmun).append(" ]");
        result.append(", [ direccion: ").append(this.direccion).append(" ]");
        result.append("}");
        return result.toString();
    }

    /**
     * Devuelve true si tiene algun dato de la entidad que debe incorporar el tecnico de entidad sin
     * completar
     * 
     * 
     * @param entidades
     *            Entidades entidades
     * @return boolean true si tiene algun dato sin completar
     */
    public static boolean tieneDatosTecnicoEntidadSincompletar(Entidades entidades) {

        if (entidades == null) {
            return false;
        }

        boolean sinInformar = false;
        if (entidades.getEmail() == null || entidades.getEmail().trim().length() == 0) {
            sinInformar = true;
        }
        if (!sinInformar && (entidades.getTfno() == null || entidades.getTfno().trim().length() == 0)) {
            sinInformar = true;
        }
        if (!sinInformar
                && (entidades.getNumTrabajadores() == null || entidades.getNumTrabajadores().intValue() == 0)) {
            sinInformar = true;
        }
        if (!sinInformar && entidades.getNumTrabHombre() == null) {
            sinInformar = true;
        }
        if (!sinInformar && entidades.getNumTrabMujer() == null) {
            sinInformar = true;
        }

        return sinInformar;

    }

    /**
     * 
     * @return Integer
     */
    public Integer getSolicInfor() {
        return solicInfor;
    }

    /**
     * 
     * @param solicInfor
     *            Integer
     */
    public void setSolicInfor(Integer solicInfor) {
        this.solicInfor = solicInfor;
    }

    public String getCodloc() {
        return codloc;
    }

    public void setCodloc(String codloc) {
        this.codloc = codloc;
    }

    public String getLocalidad() {
        return localidad;
    }

    public void setLocalidad(String localidad) {
        this.localidad = localidad;
    }

    public String getMuniExt() {
        return muniExt;
    }

    public void setMuniExt(String muniExt) {
        this.muniExt = muniExt;
    }

    public String getLocaExt() {
        return locaExt;
    }

    public void setLocaExt(String locaExt) {
        this.locaExt = locaExt;
    }

    /**
     * 
     *  
     *
     */
    public static class EntidadesCifComparator implements Comparator<Entidades> {

        @Override
        public int compare(Entidades o1, Entidades o2) {
            int dev = -1;

            if (o1 != null && o2 != null) {
                dev = (o1.getCifnif().equalsIgnoreCase(o2.getCifnif()) ? 0 : 1);
            }

            return dev;
        }

    }

}