/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package usda.weru.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.measure.Quantity;
import tec.uom.se.quantity.Quantities;
import javax.measure.quantity.Length;
import si.uom.SI;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; 

/**
 *
 * @author Joseph Levin <joelevin@weru.ksu.edu>
 */
public class CligenDataFormat {
    private final static Logger LOGGER = LogManager.getLogger(CligenDataFormat.class);

	/**
	 *
	 * @param data
	 * @param input
	 * @throws IOException
	 */
	public void read(CligenData data, InputStream input) throws IOException{

        BufferedReader reader = null;
        try{
            reader = new BufferedReader(new InputStreamReader(input));

            double version = version(reader);
            if(version< 5.3){
                throw new IOException("Unsupported file format version: " + version);
            }

            skip(reader, 3);
            elevation(reader, data);



        }
        finally{
            if(reader != null){
                try{
                    reader.close();
                }
                catch(Exception e){
                    LOGGER.error("Unable to close cligen data input stream.", e);
                }
            }
        }
    }

    private void skip(BufferedReader reader, int linesToSkip) throws IOException{
        for(int i = 0; i < linesToSkip; i++){
            reader.readLine();
        }
    }

    private double version(BufferedReader reader) throws IOException{
        String line = reader.readLine();
        if(line != null){
            try{
                return Double.valueOf(line.trim());
            }
            catch(Exception e){
                return -1;
            }
        }
        return -1;
    }

    private void elevation(BufferedReader reader, CligenData data) throws IOException{
        String line = reader.readLine();
        line = line.trim();
        String[] parts = line.split("\\s+");
        try{
            String elevationText = parts[2];
            double elevationInMeters = Double.parseDouble(elevationText);
            Quantity<Length> elevation = Quantities.getQuantity(elevationInMeters, SI.METRE);
            data.setElevation(elevation);
        }
        catch(Exception e){
            LOGGER.warn("Unable to parse elevation: " + line, e);
        }
    }



}
