/* (non-Javadoc)
  * @see jmab.strategies.DividendsStrategy#payDividends()
  */
 @Override
 public void payDividends() {
   MacroAgent dividendPayer = (MacroAgent) this.agent;
   double profits = dividendPayer.getPassedValue(profitsLagId, 0);
   if (profits > 0) {
     Population receivers =
         ((MacroPopulation) ((SimulationController) this.scheduler).getPopulation())
             .getPopulation(receiversId);
     double totalNW = 0;
     for (Agent receiver : receivers.getAgents()) {
       totalNW += ((MacroAgent) receiver).getNetWealth();
     }
     if (dividendPayer instanceof Bank) {
       Deposit payerDep = (Deposit) dividendPayer.getItemStockMatrix(true, reservesId);
       // if(profits>payerDep.getValue()){
       // profits=payerDep.getValue();
       // }
       Bank bank = (Bank) dividendPayer;
       bank.setDividends(profits * profitShare);
       for (Agent rec : receivers.getAgents()) {
         Households receiver = (Households) rec;
         double nw = receiver.getNetWealth();
         Deposit recDep = (Deposit) receiver.getItemStockMatrix(true, depositId);
         double toPay = profits * profitShare * nw / totalNW;
         recDep.setValue(recDep.getValue() + toPay);
         payerDep.setValue(payerDep.getValue() - toPay);
         Deposit otherBankReserves =
             (Deposit) ((Bank) recDep.getLiabilityHolder()).getItemStockMatrix(true, reservesId);
         otherBankReserves.setValue(otherBankReserves.getValue() + toPay);
         receiver.setDividendsReceived(receiver.getDividendsReceived() + toPay);
       }
     } else {
       if (dividendPayer.getItemStockMatrix(true, depositId).getValue() > profits * profitShare) {
         Deposit payerDep = (Deposit) dividendPayer.getItemStockMatrix(true, depositId);
         if (profits > payerDep.getValue()) {
           profits = payerDep.getValue();
         }
         AbstractFirm firm = (AbstractFirm) dividendPayer;
         firm.setDividends(profits * profitShare);
         for (Agent rec : receivers.getAgents()) {
           Households receiver = (Households) rec;
           double nw = receiver.getNetWealth();
           double toPay = profits * profitShare * nw / totalNW;
           Deposit recDep = (Deposit) receiver.getItemStockMatrix(true, depositId);
           ((Bank) payerDep.getLiabilityHolder()).transfer(payerDep, recDep, toPay);
           receiver.setDividendsReceived(receiver.getDividendsReceived() + toPay);
         }
       }
     }
   }
 }