package net.floodlightcontroller.core.web;

import net.floodlightcontroller.util.EventHistory;
import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscoveryService;
import net.onrc.onos.ofcontroller.linkdiscovery.internal.EventHistoryTopologyCluster;
import net.onrc.onos.ofcontroller.linkdiscovery.internal.LinkDiscoveryManager;

import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author subrata
 *
 */
public class EventHistoryTopologyClusterResource extends ServerResource {
    // TODO - Move this to the LinkDiscovery rest API
    protected final static Logger log = 
            LoggerFactory.getLogger(EventHistoryTopologyClusterResource.class);

    @Get("json")
    public EventHistory<EventHistoryTopologyCluster> handleEvHistReq() {

        // Get the event history count. Last <count> events would be returned
        String evHistCount = (String)getRequestAttributes().get("count");
        int    count = EventHistory.EV_HISTORY_DEFAULT_SIZE;
        try {
            count = Integer.parseInt(evHistCount);
        }
        catch(NumberFormatException nFE) {
            // Invalid input for event count - use default value
        }

        LinkDiscoveryManager topoManager =
                (LinkDiscoveryManager)getContext().getAttributes().
                get(ILinkDiscoveryService.class.getCanonicalName());
        if (topoManager != null) {
            return new EventHistory<EventHistoryTopologyCluster>(
                    topoManager.evHistTopologyCluster, count);
        }
        
        return null;
    }
}
