package usda.weru.weps.wepsRunControl;

import java.text.DecimalFormat;
import java.text.Format;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; 
import usda.weru.util.ConfigData;

/**
 *
 * @author mhaas
 */
public class WrcRunModelWindInterpolateGetStations extends WrcRunModel {
    
    public enum latlonFlag {
        lat,
        lon;
    }

    public WrcRunModelWindInterpolateGetStations () {
        this("", null, null);
    }
        
    public WrcRunModelWindInterpolateGetStations (String runDir, Logger log, WrcBackgroundIf bgIf) {
        super (runDir, log, bgIf);
        
        addCmds_exe(ConfigData.getDefault().getDataParsed(ConfigData.WindInterp1EXE));
        
        dlgIdx = 0;
        defaultDlgMsg = "interpolating 1";
        emptyCmdsMsg = "Wind file supplied";
        
        legacyMimicMIS = true; 
        
        rtnVal += 1;  //debugging only
    }
    
    public WrcRunModelWindInterpolateGetStations (String runDir, String[] commandsArr, Logger log, WrcBackgroundIf bgIf) {
        super (runDir, commandsArr, log, bgIf);
    }

    
    public void addCmds_latlon (String latlonStr, latlonFlag flag) throws WrcException {
        
        String typeStr = (flag == latlonFlag.lat) ? "Latitude" : "Longitude";
        
        if (latlonStr != null) {
            //round down to two decimal places
            try {
                double d = Double.valueOf(latlonStr.trim());
                Format format = new DecimalFormat(ConfigData.WindgenDecimal);
                String temp = format.format(d);
                if (!latlonStr.equals(temp)) {
                    LOGGER.debug("Input Logitude: " + latlonStr);
                    latlonStr = temp;
                    LOGGER.debug("Longitude trimmed to " + latlonStr);
                }
            } catch (NumberFormatException e) {
                //do nothing
                LOGGER.debug("Unable to convert Longitude. \"" + latlonStr + "\"", e);
                throw new WrcException ("WrcRunModelInterpolate, lat / lon conversion failed:" +
                       typeStr + " " +  latlonStr, e);
            }
        }

        addCmdPair((flag == latlonFlag.lat) ? "-lat" : "-lon", latlonStr);
    }
    
    public void addCmds_idxFile (String fileStr) {
        addCmdPair("-f", fileStr);
    }
    
    public void addCmds_polFile (String fileStr) {
        addCmdPair("-p", fileStr);
    }

    public void addCmds_outputFile (String fileStr) {
        addCmdPair("-o", fileStr);
    }

    
}
