package seng302.DataInput;

import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import seng302.Model.Regatta;


import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;

/**
 * Created by jjg64 on 19/04/17.
 */
public class RegattaXMLReader extends XMLReader implements RegattaDataSource {
    private Regatta regatta;

    /**
     * Constructor for Regatta XML
     *
     * @param filePath path of the file
     * @throws IOException                  error
     * @throws SAXException                 error
     * @throws ParserConfigurationException error
     */
    public RegattaXMLReader(String filePath) throws IOException, SAXException, ParserConfigurationException {
        this(filePath, true);
    }

    /**
     * Constructor for Regatta XML
     *
     * @param filePath file path to read
     * @param read     whether or not to read and store the files straight away.
     * @throws IOException                  error
     * @throws SAXException                 error
     * @throws ParserConfigurationException error
     */
    public RegattaXMLReader(String filePath, boolean read) throws IOException, SAXException, ParserConfigurationException {
        super(filePath);
        if (read) {
            read();
        }
    }

    /**
     * Read the XML
     */
    private void read() {
        NodeList attributeConfig = doc.getElementsByTagName("RegattaConfig");
        Element attributes = (Element) attributeConfig.item(0);
        makeRegatta(attributes);
    }

    /**
     * Create new regatta
     * @param attributes
     */
    private void makeRegatta(Element attributes) {
        int regattaID = Integer.parseInt(getTextValueOfNode(attributes, "RegattaID"));
        String regattaName = getTextValueOfNode(attributes, "RegattaName");
        String courseName = getTextValueOfNode(attributes, "CourseName");
        double centralLatitude = Double.parseDouble(getTextValueOfNode(attributes, "CentralLatitude"));
        double centralLongitude = Double.parseDouble(getTextValueOfNode(attributes, "CentralLongitude"));
        double centralAltitude = Double.parseDouble(getTextValueOfNode(attributes, "CentralAltitude"));
        float utcOffset = Float.parseFloat(getTextValueOfNode(attributes, "UtcOffset"));
        float magneticVariation = Float.parseFloat(getTextValueOfNode(attributes, "MagneticVariation"));

        regatta = new Regatta(regattaID, regattaName, courseName, centralLatitude, centralLongitude, centralAltitude, utcOffset, magneticVariation);
    }

    public Regatta getRegatta() {
        return regatta;
    }
}
