package scripts;


import fr.ifremer.isisfish.entities.Cell;
import fr.ifremer.isisfish.entities.Gear;
import fr.ifremer.isisfish.entities.Zone;
import fr.ifremer.isisfish.simulator.SimulationContext;
import fr.ifremer.isisfish.types.TimeStep;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.topia.TopiaException;

/**
 *
 * @author poussin
 * @version $Revision$
 *
 * Last update: $Date$
 * by : $Author$
 */
public class SiMatrixMarxan extends SiMatrixEffortByCell {

    /** to use log facility, just put in your code: log.info(\"...\"); */
    static private Log log = LogFactory.getLog(SiMatrixMarxan.class);

    public SiMatrixMarxan(SimulationContext context) throws TopiaException {
        super(context);
    }

    @Override
    protected double getEffortReduction(TimeStep step, Gear gear, Cell cellMet) {
        double effortReduction = 0.0;
        //log.info("============================MarxanWithZones============================");
        // Recuperation de la liste de zone de reduction d'effort pour l'engin courant:
        List<Zone> gearZones = (List)context.getValue("ZoneReduction-" + gear.getName());
        for (Zone zoneEffortReduction : gearZones) {
            // Ensemble des cellules de la zone de reduction d'effort:
            Set<Cell> cellEffortReduction = new HashSet<Cell>(zoneEffortReduction.getCell());

            // si intersection entre zone metier (cellule) et zone de reduction d'effort:
            if (cellEffortReduction.contains(cellMet)) {
                // ...on recupere la proportion de reduction correspondante:
                effortReduction = (Double)context.getValue("Proportion-" + zoneEffortReduction.getName());
                break;
                // Log pour verification (temporaire):
                // log.info("===MwZ=== cell:" + cellMet.getName() +
                // ", zone:" + zoneEffortReduction.getName() +
                // ", proportion:" + effortReduction);
            }
        }
        return effortReduction;
    }



}
