package io.github.ihongs.dh.lucene.query;

import io.github.ihongs.util.Synt;
import org.apache.lucene.document.DoublePoint;
import org.apache.lucene.search.Query;

/**
 *
 * @author Hongs
 */
public class DoubleQuery implements IQuery {
    @Override
    public Query wdr(String k, Object v) {
        throw new UnsupportedOperationException("Field "+k+" does not support search");
    }
    @Override
    public Query whr(String k, Object v) {
        if (v == null) {
            throw new NullPointerException("Query for "+k+" must be number, but null");
        }
        double  n2 = Synt.asDouble(v);
        Query   q2 = DoublePoint.newExactQuery("@"+k, n2);
        return  q2;
    }
    @Override
    public Query whr(String k, Object n, Object x, boolean l, boolean g) {
        if (n == null && x == null) {
            throw new NullPointerException("Range for "+k+" must be number, but null");
        }
        double n2, x2;
        if (n == null || "".equals(n)) {
            n2 = Double.NEGATIVE_INFINITY;
        } else {
            n2 = Synt.asFloat (n);
            if (!l) {
                n2 = DoublePoint.nextUp  (n2);
            }
        }
        if (x == null || "".equals(x)) {
            x2 = Double.POSITIVE_INFINITY;
        } else {
            x2 = Synt.asFloat (x);
            if (!g) {
                x2 = DoublePoint.nextDown(x2);
            }
        }
        Query   q2 = DoublePoint.newRangeQuery("@"+k, n2, x2);
        return  q2;
    }
}