/**
 * 
 */
package com.ejie.ad74a.model;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.ejie.ad74a.util.UtilDates;
import com.ejie.ad74a.util.UtilPrecios;

/**
 * POJO para la representacion de informacion de un copago
 * @author BICUGUAL
 */
public class Copago implements Serializable{

	private static final long serialVersionUID = 1L;
	
	private TipoPrecio tipoPrecio;
	private Periodo mensualidad;

	private BigDecimal importeMensual;

	private LocalDate fInicio;
	private LocalDate fFin;
	
	private boolean indExento=false;
	
	private int nDias;
	private int nMeses;
	
	private BigDecimal importe;
	
	public Copago () {
		super();
	}

	public Copago(TipoPrecio tipoPrecio, Periodo mensualidad, BigDecimal importeMensual, LocalDate fInicio) {
		super();
		this.tipoPrecio = tipoPrecio;
		this.mensualidad = mensualidad;
		this.importeMensual = importeMensual;
		this.fInicio = fInicio;
	}
	
	
	public Copago(TipoPrecio tipoPrecio, Periodo mensualidad, BigDecimal importeMensual, LocalDate fInicio,
			LocalDate fFin, boolean indExento) {
		super();
		this.tipoPrecio = tipoPrecio;
		this.mensualidad = mensualidad;
		this.importeMensual = importeMensual;
		this.fInicio = fInicio;
		this.fFin = fFin;
		this.indExento = indExento;

		int nDiasCopago = UtilDates.getDaysBetweenTwoLocalDates(fInicio, fFin).intValue();
		if (this.mensualidad.getNdias() == nDiasCopago) {
			this.nMeses = 1;
		} else {
			this.nDias = nDiasCopago;
		}

		this.importe = UtilPrecios.calcularImporte(nDiasCopago, mensualidad.getNdias(), importeMensual);
	}

	public TipoPrecio getTipoPrecio() {
		return tipoPrecio;
	}

	public void setTipoPrecio(TipoPrecio tipoPrecio) {
		this.tipoPrecio = tipoPrecio;
	}

	public LocalDate getfInicio() {
		return fInicio;
	}

	public void setfInicio(LocalDate fInicio) {
		this.fInicio = fInicio;
	}

	public LocalDate getfFin() {
		return fFin;
	}

	public void setfFin(LocalDate fFin) {
		this.fFin = fFin;
	}

	public boolean isIndExento() {
		return indExento;
	}

	public void setIndExento(boolean indExento) {
		this.indExento = indExento;
	}

	public BigDecimal getImporte() {
		return importe;
	}

	public void setImporte(BigDecimal importe) {
		this.importe = importe;
	}

	public Periodo getMensualidad() {
		return mensualidad;
	}

	public void setMensualidad(Periodo mensualidad) {
		this.mensualidad = mensualidad;
	}

	public BigDecimal getImporteMensual() {
		return importeMensual;
	}
	
	public void setImporteMensual(BigDecimal importeMensual) {
		this.importeMensual = importeMensual;
	}

	public int getnDias() {
		return nDias;
	}

	public void setnDias(int nDias) {
		this.nDias = nDias;
	}

	public int getnMeses() {
		return nMeses;
	}

	public void setnMeses(int nMeses) {
		this.nMeses = nMeses;
	}
	
	public String getDescripcionCopago() {
		return Stream.of(UtilDates.formatLocalDateToString(this.fInicio), "a", UtilDates.formatLocalDateToString(this.fFin))
				.filter(Objects::nonNull).collect(Collectors.joining(" "));
	}
	
	@Override
	public String toString() {
		return "Copago [tipoPrecio=" + tipoPrecio + ", mensualidad=" + mensualidad + ", importeMensual="
				+ importeMensual + ", fInicio=" + fInicio + ", fFin=" + fFin + ", indExento=" + indExento + ", nDias="
				+ nDias + ", nMeses=" + nMeses + ", importe=" + importe + "]";
	}
	
}