package ijopencv.opencv;

import ij.gui.PointRoi;
import java.lang.reflect.Type;
import org.bytedeco.javacpp.opencv_core;
import org.bytedeco.javacpp.opencv_core.Point;
import org.scijava.Prioritized;
import org.scijava.Priority;
import org.scijava.convert.AbstractConverter;
import org.scijava.convert.Converter;
import org.scijava.log.LogService;
import org.scijava.plugin.Plugin;

@Plugin(type = Converter.class, priority = Priority.LOW_PRIORITY)
public class PointPointRoiConverter extends AbstractConverter< Point, PointRoi> {
@Override
    public int compareTo(Prioritized o) {
        return super.compareTo(o);
    }

    @Override
    public LogService log() {
        return super.log();
    }

    @Override
    public String getIdentifier() {
        return super.getIdentifier();
    }

    @Override
    public < T> T convert(Object o, Class< T> type) {
        opencv_core.Point p =(opencv_core.Point)o;
        PointRoi pr = new PointRoi(p.x(), p.y());
        return (T)pr;
    }

    @Override
    public Class< PointRoi> getOutputType() {
        return PointRoi.class;
    }

    @Override
    public Class< opencv_core.Point> getInputType() {
        return opencv_core.Point.class;
    }

    @Override
    public boolean canConvert(Object src, Type dest) {
                                if(!(src instanceof Point)){
            return false;
        }
        opencv_core.Point p =(opencv_core.Point)src;
        if (p.sizeof() != 2) {
            return false;
        }
        return true;
    }
}