package usda.weru.weps.wepsRunControl;

import java.io.File;
import org.apache.logging.log4j.Logger; 
import usda.weru.gis.latlong.LatLong;
import usda.weru.util.ConfigData;
import static usda.weru.weps.RunFileData.CycleCount;
import static usda.weru.weps.RunFileData.RotationYears;
import usda.weru.weps.Weps;
import usda.weru.weps.location.CligenStation;
import usda.weru.weps.location.Station;
import usda.weru.weps.location.WindgenStation;
import usda.weru.weps.wepsRunControl.WrcException.wrcExceptionType;

/**
 *
 * @author mhaas
 */
public class WrcRunModelWeps extends WrcRunModel {
    
    public class WepsIntegratedParms {
        public LatLong wepsLatLng = null;
        public int simYears = 0;
        public boolean isWindgenInterpolated = false;
        public String windGenFileName = "win_gen.win";
        public long windWBANnum = -1;
        public LatLong windLatLng = null;
        public long cligenStateId;
        public long cligenStationId;
    }
    
    boolean isWepsIntegrated;
    WepsIntegratedParms integratedParms;
    String wepsWindInputFileName;

    public WrcRunModelWeps () {
        this("", null, null, null, false);
    }
    
    public WrcRunModelWeps (String runDir, Logger log, WrcBackgroundIf bgIf) {
        super (runDir, log, bgIf);
        
        isWepsIntegrated = false;
        integratedParms = null;
        wepsWindInputFileName = null;
        
        addCmds_exe(ConfigData.getDefault().getDataParsed(ConfigData.WepsExe));
        addCmds_fromStr(ConfigData.getDefault().getDataParsed(ConfigData.WepsCmd));

        dlgIdx = 2;
        emptyCmdsMsg = "";
         
        rtnVal += 3;  //debugging only        
    }

    public WrcRunModelWeps (String runDir, String[] commandsArr, Logger log, WrcBackgroundIf bgIf, boolean isWinInterpolate) {
        super (runDir, commandsArr, log, bgIf);
    }
  
    public void addCmds_outputPath (String runDir) {
        addCmd("-P", runDir);
    }
    
    public void addCmds_addWindgenInput (String newParm) {
        wepsWindInputFileName = newParm;
//        addCmd("-WindInputFile ", newParm);
    }
    
    public void setIsIntegratedModel () {
        isWepsIntegrated = true;
    }
    
    public void setIntegratedModelData (WrcRunModelWind windModel, WrcRunModelClimate climateModel) throws WrcException {
        isWepsIntegrated = true;
        
        integratedParms = new WepsIntegratedParms();
        integratedParms.wepsLatLng = Weps.getInstance().getRunFileData().getBean().getLatLong();
        
        String numYrs = Weps.getInstance().getRunFileData().getData(RotationYears);
        String numCyl = Weps.getInstance().getRunFileData().getData(CycleCount);
        integratedParms.simYears = Integer.parseInt(numYrs) * Integer.parseInt(numCyl);
        
        Station station = Weps.getInstance().getRunFileData().getBean().getWindgenStation();
        if (station instanceof usda.weru.weps.location.WindgenStation) {
            integratedParms.windWBANnum = ((WindgenStation)station).getWBan();
        } else if (station instanceof usda.weru.weps.location.InterpolatedStation) {
            integratedParms.isWindgenInterpolated = true;
            integratedParms.windLatLng = station.getLatLong();
        } else {
            throw new WrcException(
                "Current Windgen station type unsupported by wepsIntegrated model endpoint."+
                "Acceptable types are: WindgenStation or InterpolatedStation"
            ).setType(wrcExceptionType.stationNotFound);

        }
        integratedParms.windGenFileName = new File(windModel.get_outputFile()).getName();
        
        CligenStation cligenStation = (CligenStation)Weps.getInstance().getRunFileData().getBean().getCligenStation();
        integratedParms.cligenStateId = cligenStation.getState();
        integratedParms.cligenStationId = cligenStation.getId();
    }
    
    
}
