package usda.weru.remoteDataAccess.csip.polygon;

import java.awt.geom.Point2D;
import java.util.ArrayList;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.codehaus.jettison.json.JSONObject;
import usda.weru.gis.latlong.LatLong;
import usda.weru.remoteDataAccess.csip.CsipInterface;
import usda.weru.remoteDataAccess.csip.CsipInterfaceExtendedReturn;
import usda.weru.remoteDataAccess.csip.CsipInterfaceTreeMap;
import usda.weru.remoteDataAccess.exceptions.RdaConnectException;

/**
 *
 * @author mhaas
 */
public abstract class CsipInterfacePolygon extends CsipInterface implements CsipInterfaceExtendedReturn  {
    
    private static final Logger LOGGER = LogManager.getLogger(CsipInterfacePolygon.class);

    protected ArrayList<Point2D.Double> polygon;
    protected LatLong polygonCenter;

    protected String name;
    protected String parentPath;
    
    protected CsipInterfaceTreeMap extendedReturnTree = null;
    
    public CsipInterfacePolygon () {
        super();
    }
    
    public CsipInterfaceTreeMap getReturnTree() {
        return extendedReturnTree;
    }
    
    // Only for use to pre-initialize from another existing CsipInterfaceSoil
    public void setReturnTree(CsipInterfaceTreeMap newTree) {
        extendedReturnTree = newTree;
    }
    
    protected void setPolygon (LatLong polygonCenter, ArrayList<Point2D.Double> polygon) {
        this.polygonCenter = polygonCenter;
        this.polygon = polygon;
    }
    
    abstract protected String getCatalogUrl ();
    
    @Override
    public ArrayList<String> callCsipCatalog () throws RdaConnectException {
        ArrayList<String>  ret = new ArrayList<>();
        JSONObject modelParms;
        JSONObject modelResult;
        
        try {
            modelParms = newCsipJson();
            addParmsCatalog(modelParms);
            
            modelResult = doCsipPost(getCatalogUrl(), modelParms);
            ret = parseResultCatalog(modelResult);
        } catch (Exception ex) {
            LOGGER.log(Level.INFO, ex.getMessage());
            throw (new RdaConnectException("Unable to connect remote service " + interfaceName, ex, interfaceName));
        }
        return ret;
    }
    
    @Override
    public CsipInterfaceTreeMap getResultItemDecendent(String Item) {
        return extendedReturnTree.get(Item);
    }
}
