package usda.weru.remoteDataAccess.csip.crlmod;

import java.io.File;
import java.util.ArrayList;
import usda.weru.remoteDataAccess.RdaHierarchicalItem;
import usda.weru.remoteDataAccess.csip.CsipHierarchicalItem;
import usda.weru.remoteDataAccess.csip.CsipInputController;
import usda.weru.remoteDataAccess.csip.CsipInterface;
import usda.weru.remoteDataAccess.csip.CsipLmodUtil.lmodType;
import usda.weru.remoteDataAccess.exceptions.RdaConnectException;
import usda.weru.util.ConfigData;

/**
 *
 * @author mhaas
 */
public class CsipInputContCrLmod extends CsipInputController {
    
    lmodType ifType;
    ArrayList<String> lmodResults;
    
    public CsipInputContCrLmod (lmodType ifType) {
        this (ifType, false);
    }
    
    public CsipInputContCrLmod (lmodType ifType, boolean fromSubClass) {
        super();
        this.ifType = ifType;
        
        lmodResults = null;
        csipIf = getNewCsipInterface();
    
        switch (ifType) {
            case lmodCrop:
            case lmodCropResidue:
                if (ConfigData.checkParmValue("CD-WS-csip-crlmod-Crop-DoLoadCache","1")) {
                    doCacheBackgroundLoad = true;
                }
                break;
            case lmodOperation:
                if (ConfigData.checkParmValue("CD-WS-csip-crlmod-Operation-DoLoadCache","1")) {
                    doCacheBackgroundLoad = true;
                }
                break;
            case lmodManagement:
                if (ConfigData.checkParmValue("CD-WS-csip-crlmod-Management-DoLoadCache","1")) {
                    doCacheBackgroundLoad = true;
                }
                break;
        }
    }
    
    public lmodType getIfType () {
        return ifType;
    }

    @Override
    protected CsipInterface getNewCsipInterface() {
        switch (ifType) {
            case lmodCrop:
                return new CsipIfCrLmodCrop ();
            case lmodCropResidue:
                return new CsipIfCrLmodCropResidue ();
            case lmodOperation:
                return new CsipIfCrLmodOp ();
            case lmodManagement:
            default:
                return new CsipIfCrLmodMan ();
        }
    }
    
    @Override
    public void setInterfaceName (String interfaceName) {
        super.setInterfaceName (interfaceName);
        csipIf.setInterfaceName(interfaceName);
    }
    
    @Override
    protected RdaHierarchicalItem initializeData (RdaHierarchicalItem lmodTreeRoot) throws RdaConnectException {
        lmodResults = csipIf.callCsipCatalog();

        if (lmodTreeRoot instanceof CsipHierarchicalItem) {
            for (String lmodItem : lmodResults) {
                ((CsipHierarchicalItem)lmodTreeRoot).addPath (lmodItem);
            }
        }
        return lmodTreeRoot;
    }
    
    @Override
    public File getFile(RdaHierarchicalItem item) throws RdaConnectException {
        return csipIf.callCsipGetRecord(item.getName(), item.getParentPath());
    }
    
    @Override
    protected void loadChildren (RdaHierarchicalItem rootItem) {
        // Not required for LMOD
        int i = 1;
    }
}
