package org.lucci.madhoc.network.monitor.measure;

import java.util.Collection;
import java.util.Vector;

import org.lucci.madhoc.network.Station;
import org.lucci.madhoc.simulation.measure.NaturalNumberSensor;
import org.lucci.madhoc.simulation.measure.Unit;
import org.lucci.madhoc.simulation.projection.Projection;
import org.lucci.math.Utilities;
import org.lucci.math.relation.DefaultRelation;
import org.lucci.math.relation.Relation;

public class TimeForAllStationMeetEachOthers extends NaturalNumberSensor
{
    private Relation<Station, Station> map = new DefaultRelation<Station, Station>();
    
    @Override
    public Double takeNewDoubleValue(Projection projection)
    {
        for (Station s : projection.getNetwork().getStations())
        {
            for (Station neighbor : s.getNetworkingUnit().getNeighborhood())
            {
                map.add(s, neighbor);
            }
        }
        
        Collection<Double> numbersOfMeetings = new Vector<Double>(); 
        
        for (Station s : map.getKeys())
        {
            numbersOfMeetings.add((double) map.getValues(s).size()); 
        }
        
        return Utilities.getAverage(numbersOfMeetings);
    }

    @Override
    public Unit getUnit()
    {
        return Unit.SECOND;
    }

    @Override
    public String getName()
    {
        return "time for all stations to meet each others";
    }

}