package com.ejie.ab39a.model;

import com.ejie.ab39a.constantes.Constantes;
import com.ejie.ab39a.utils.Utilidades;
import com.ejie.x38.util.Constants;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.context.i18n.LocaleContextHolder;

/**
 * PlanesGestion.
 * 
 *  
 */

public class PlanesGestion implements java.io.Serializable {

    private static final long serialVersionUID = 1L;
    private Integer codplang;
    private PlanesEstrategicos planesEstrategicos;
    private Long anyo;
    private List<ElementosPg> elementosPgs = new ArrayList<ElementosPg>();
    // Atributo necesario para controlar la query a realizar en el filtro
    private String usuarioConectado;
    private String nombre;
    private String nombreeus;
    private Date fechaModificacion;

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

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

    /**
     * Method 'PlanesGestion'.
     * 
     * @param codplang
     *            Integer codplang
     * @param planesEstrategicos
     *            PlanesEstrategicos planesEstrategicos
     * @param anyo
     *            Long anyo
     */
    public PlanesGestion(Integer codplang, PlanesEstrategicos planesEstrategicos, Long anyo) {
        super();
        this.codplang = codplang;
        this.planesEstrategicos = planesEstrategicos;
        this.anyo = anyo;
    }

    /**
     * Method 'PlanesGestion'.
     * 
     * @param codplang
     *            Integer codplang
     * @param planesEstrategicos
     *            PlanesEstrategicos planesEstrategicos
     * @param anyo
     *            Long anyo
     * @param elementosPgs
     *            List<ElementosPg> elementosPgs
     * 
     */
    public PlanesGestion(Integer codplang, PlanesEstrategicos planesEstrategicos, Long anyo,
            List<ElementosPg> elementosPgs) {
        super();

        this.codplang = codplang;
        this.planesEstrategicos = planesEstrategicos;
        this.anyo = anyo;
        this.elementosPgs = elementosPgs;
    }

    /**
     * Method 'PlanesGestion'.
     * 
     * @param codplang
     *            Integer codplang
     * @param planesEstrategicos
     *            PlanesEstrategicos planesEstrategicos
     * @param anyo
     *            Long anyo
     * @param elementosPgs
     *            List<ElementosPg> elementosPgs
     * @param usuarioConectado
     *            String usuarioConectado
     */

    public PlanesGestion(Integer codplang, PlanesEstrategicos planesEstrategicos, Long anyo,
            List<ElementosPg> elementosPgs, String usuarioConectado) {
        super();
        this.codplang = codplang;
        this.planesEstrategicos = planesEstrategicos;
        this.anyo = anyo;
        this.elementosPgs = elementosPgs;
        this.usuarioConectado = usuarioConectado;
    }

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

    public Integer getCodplang() {
        return this.codplang;
    }

    /**
     * Method 'setCodplang'.
     *
     * @param codplang
     *            Integer
     */
    public void setCodplang(Integer codplang) {
        this.codplang = codplang;
    }

    /**
     * 
     * @return PlanesEstrategicos planesEstrategicos
     */
    public PlanesEstrategicos getPlanesEstrategicos() {
        return planesEstrategicos;
    }

    /**
     * 
     * @param planesEstrategicos
     *            PlanesEstrategicos planesEstrategicos
     */
    public void setPlanesEstrategicos(PlanesEstrategicos planesEstrategicos) {
        this.planesEstrategicos = planesEstrategicos;
    }

    /**
     * Method 'getAnyo'.
     *
     * @return Long
     */

    public Long getAnyo() {
        return this.anyo;
    }

    /**
     * Method 'setAnyo'.
     *
     * @param anyo
     *            Long
     */

    public void setAnyo(Long anyo) {
        this.anyo = anyo;
    }

    /**
     * 
     * @return String
     */
    public String getAnyos() {
        StringBuilder desc = new StringBuilder(Constantes.VACIO);
        if (this.getPlanesEstrategicos().getAnyoinicio() != null) {
            desc.append(this.getPlanesEstrategicos().getAnyoinicio());
        }
        if (this.getPlanesEstrategicos().getAnyofin() != null) {
            desc.append(Constantes.GUION);
            desc.append(this.getPlanesEstrategicos().getAnyofin());
        }
        return desc.toString();
    }

    /**
     * Method 'getElementosPgs'.
     *
     * @return List
     */
    @JsonIgnore
    public List<ElementosPg> getElementosPgs() {
        return this.elementosPgs;
    }

    /**
     * Method 'setElementosPgs'.
     *
     * @param elementosPgs
     *            List
     */
    public void setElementosPgs(List<ElementosPg> elementosPgs) {
        this.elementosPgs = elementosPgs;
    }

    /**
     * Method 'getUsuarioConectado'.
     * 
     * @return String usuarioConectado
     */

    public String getUsuarioConectado() {
        return usuarioConectado;
    }

    /**
     * Method 'setUsuarioConectado'
     * 
     * @param usuarioConectado
     *            String
     */
    public void setUsuarioConectado(String usuarioConectado) {
        this.usuarioConectado = usuarioConectado;
    }

    public String getEntidadPlani() {
        StringBuilder desc = new StringBuilder(Constantes.VACIO);

        if (this.planesEstrategicos != null && this.planesEstrategicos.getEntidad() != null
                && this.planesEstrategicos.getEntidad().getDesentidad() != null) {
            desc.append(this.planesEstrategicos.getEntidad().getDesentidad());
        }
        if (this.planesEstrategicos != null && this.planesEstrategicos.getPlanificacion() != null) {
            if (this.planesEstrategicos.getPlanificacion().getFechainicio() != null
                    && !this.planesEstrategicos.getPlanificacion().getFechainicio().equals(Constantes.NUM_CERO)) {
                desc.append(Constantes.GUION);
                desc.append(this.planesEstrategicos.getPlanificacion().getFechainicio());
            }
            if (this.planesEstrategicos.getPlanificacion().getFechafin() != null
                    && !this.planesEstrategicos.getPlanificacion().getFechafin().equals(Constantes.NUM_CERO)) {
                desc.append(Constantes.SEPARADOR);
                desc.append(this.planesEstrategicos.getPlanificacion().getFechafin());
            }
        }

        return desc.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(" [ codplang: ").append(this.codplang).append(" ]");
        result.append(", [ codplane: ").append(this.planesEstrategicos).append(" ]");
        result.append(", [ anyo: ").append(this.anyo).append(" ]");
        result.append("}");
        return result.toString();
    }

    /**
     * 
     * @return String
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * 
     * @param nombre
     *            String
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * 
     * @return String
     */
    public String getNombreeus() {
        return nombreeus;
    }

    /**
     * 
     * @param nombreeus
     *            String
     */
    public void setNombreeus(String nombreeus) {
        this.nombreeus = nombreeus;
    }

    /**
     * @return the fechaModificacion
     */
    public Date getFechaModificacion() {
        return fechaModificacion;
    }

    /**
     * @param fechaModificacion
     *            the fechaModificacion to set
     */
    public void setFechaModificacion(Date fechaModificacion) {
        this.fechaModificacion = fechaModificacion;
    }

    /**
     * 
     * @return String
     */
    public String getNombreIdioma() {
        StringBuilder desc = new StringBuilder(Constantes.VACIO);
        if (Constants.EUSKARA.equals(LocaleContextHolder.getLocale().getLanguage())) {
            desc.append(this.getNombreeus());
        } else {
            desc.append(this.getNombre());
        }
        return desc.toString();
    }

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

    public String getNombreEsEu() {
        if (Constants.EUSKARA.equals(LocaleContextHolder.getLocale().getLanguage())) {
            if (Utilidades.isEmpty(this.getNombreeus())) {
                if (Utilidades.isEmpty(this.getNombre())) {
                    return "";
                } else {
                    return this.getNombre();
                }
            } else {
                return this.getNombreeus();
            }
        } else {
            if (Utilidades.isEmpty(this.getNombre())) {
                if (Utilidades.isEmpty(this.getNombreeus())) {
                    return "";
                } else {
                    return this.getNombreeus();
                }
            } else {
                return this.getNombre();
            }
        }
    }
}
