package com.tqdev.crudapi.record.spatial;

import org.jooq.Configuration;
import org.jooq.Context;
import org.jooq.Field;
import org.jooq.QueryPart;
import org.jooq.impl.CustomCondition;
import org.jooq.impl.DSL;

public class Contains extends CustomCondition {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	final Field<?> field1;
	final Field<?> field2;

	Contains(Field<?> field1, Field<?> field2) {
		super();
		this.field1 = field1;
		this.field2 = field2;
	}

	@Override
	public void accept(Context<?> context) {
		context.visit(delegate(context.configuration()));
	}

	private QueryPart delegate(Configuration configuration) {
		switch (configuration.dialect().family().toString()) {
		case "MYSQL":
		case "POSTGRES":
			return DSL.field("ST_Contains({0}, {1})", Boolean.class, field1, field2);
		case "SQLSERVER":
			return DSL.field("{0}.STContains({1})", Boolean.class, field1, field2);
		default:
			throw new UnsupportedOperationException("Dialect not supported");
		}
	}
}