package com.fitbank.installment;

import java.math.BigDecimal;

import com.fitbank.common.helper.Constant;

/**
 * Clase que genera una tabla de interes considerando remanates por la diferencia del redondeo del valor de 
 * la cuota a los decimales de la moneda y capital al vencimiento. 
 * @author BANTEC Inc.
 *
 */
public class InterestInstallmentRemnant extends AbstractQuota{

	  /* (non-Javadoc)
	 * @see com.fitbank.installment.AbstractQuota#calculate(com.fitbank.installment.InstallmentTable)
	 */
	  public void calculate(InstallmentTable pQuotaTable) throws Exception {
		super.calcularemanete = true;
		this.quotaTable = pQuotaTable;
		this.quotanumber = pQuotaTable.getBegincalculationperiod();
		super.reducedcapital = quotaTable.getAmount();
	    boolean end = false;
	    super.calculateTotalperiod(pQuotaTable);
	    int size = quotaTable.getTotalperiod() ;
	    size = size + quotaTable.getBegincalculationperiod()-1;    
	    for (int i = this.quotaTable.getBegincalculationperiod(); i <= size; i++) {
	      super.calculatePayDate(this.quotaTable);
	      if(i == size ){
	    	  end =true;
	      }
	      super.processByCategory(false);
	      this.calculateCuota(end);
	      this.quotanumber++;
	      if(super.stop){
	    	  break;
	      }
	    }//end for
	  }
	  
	  
	  /**
	   * Calcula tabla de pago dado una cuota fija.
	   * @throws Exception
	   */
	  protected void calculateCuota(boolean pEnd) throws Exception{	    	    

		    BigDecimal capital = Constant.BD_ZERO;
		    // Obtiene el valor de interes y comision de la cuota
		    // Si se trata de la ultima cuota
		    if(pEnd){
				// Carga todo el capital reducido al capital de la cuota
				capital = this.quotaTable.getAmount();
		    }
		    super.addQuota(this.quotanumber,this.quotaTable.getAmount(),capital,true);
	  }
}
