/**
 * 
 */
package plugins.kernel.roi.descriptor;

import icy.plugin.abstract_.Plugin;
import icy.plugin.interface_.PluginROIDescriptor;
import icy.roi.ROI;
import icy.roi.ROI2D;
import icy.roi.ROI3D;
import icy.roi.ROIDescriptor;
import icy.roi.ROIDescriptorInt;
import icy.sequence.Sequence;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * This {@link PluginROIDescriptor} implements the properties ROI descriptors (position, size,
 * name...)
 * 
 * @author Stephane
 */
public class PropertyROIDescriptor  extends Plugin implements PluginROIDescriptor
{
    public static final String SURFACE = "Surface";
    public static final String VOLUME = "Volume";
    public static final String PERIMETER = "Perimeter";
    public static final String SURFAREA = "Surface area";

    @Override
    public List<ROIDescriptor> getDescriptors()
    {
        Map<String, Class<?>> descriptors = new HashMap<String, Class<?>>();

        descriptors.put(VOLUME, Double.class);
        descriptors.put(SURFACE, Double.class);
        descriptors.put(PERIMETER, Double.class);
        descriptors.put(SURFAREA, Double.class);

        return descriptors;
    }

    @Override
    public Map<ROIDescriptor, Object> compute(ROI roi, Sequence sequence, int z, int t, int c)
            throws UnsupportedOperationException
    {
        Map<String, Object> map = new HashMap<String, Object>();

        if (roi instanceof ROI2D)
        {
            map.put(SURFACE, Double.valueOf(roi.getNumberOfPoints()));
            map.put(PERIMETER, Double.valueOf(roi.getNumberOfContourPoints()));

            // other descriptors
        }
        else if (roi instanceof ROI3D)
        {
            map.put(VOLUME, Double.valueOf(roi.getNumberOfPoints()));
        }
        else
            throw new UnsupportedOperationException(getClass().getName() + " does not support ROI of type "
                    + roi.getClass().getName());

        return map;
    }
}