Source: data/pa-cometdata.js

const cometEllipticalNames = {
    encke: "Encke",
    temple2: "Temple 2",
    hanedaCampos: "Haneda-Campos",
    schwassmannWachmann2: "Schwassmann-Wachmann 2",
    borrelly: "Borrelly",
    whipple: "Whipple",
    oterma: "Oterma",
    schaumasse: "Schaumasse",
    comasSola: "Comas Sola",
    schwassmannWachmann1: "Schwassmann-Wachmann 1",
    neujmin1: "Neujmin 1",
    crommelin: "Crommelin",
    olbers: "Olbers",
    ponsBrooks: "Pons-Brooks",
    halley: "Halley"
};

const cometParabolicNames = {
    kohler: "Kohler"
};

/**
 * Comet Elliptical Data
 * 
 * Elements:
 *   0: Name
 *   1: epoch_EpochOfPerihelion
 *   2: peri_LongitudeOfPerihelion
 *   3: node_LongitudeOfAscendingNode
 *   4: period_PeriodOfOrbit
 *   5: axis_SemiMajorAxisOfOrbit
 *   6: ecc_EccentricityOfOrbit
 *   7: incl_InclinationOfOrbit
 */
const cometEllipticalData = [
    [cometEllipticalNames.encke, 1974.32, 160.1, 334.2, 3.3, 2.21, 0.85, 12.0],
    [cometEllipticalNames.temple2, 1972.87, 310.2, 119.3, 5.26, 3.02, 0.55, 12.5],
    [cometEllipticalNames.hanedaCampos, 1978.77, 12.02, 131.7, 5.37, 3.07, 0.64, 5.81],
    [cometEllipticalNames.schwassmannWachmann2, 1974.7, 123.3, 126.0, 6.51, 3.49, 0.39, 3.7],
    [cometEllipticalNames.borrelly, 1974.36, 67.8, 75.1, 6.76, 3.58, 0.63, 30.2],
    [cometEllipticalNames.whipple, 1970.77, 18.2, 188.4, 7.47, 3.82, 0.35, 10.2],
    [cometEllipticalNames.oterma, 1958.44, 150.0, 155.1, 7.88, 3.96, 0.14, 4.0],
    [cometEllipticalNames.schaumasse, 1960.29, 138.1, 86.2, 8.18, 4.05, 0.71, 12.0],
    [cometEllipticalNames.comasSola, 1969.83, 102.9, 62.8, 8.55, 4.18, 0.58, 13.4],
    [cometEllipticalNames.schwassmannWachmann1, 1974.12, 334.1, 319.6, 15.03, 6.09, 0.11, 9.7],
    [cometEllipticalNames.neujmin1, 1966.94, 334.0, 347.2, 17.93, 6.86, 0.78, 15.0],
    [cometEllipticalNames.crommelin, 1956.82, 86.4, 250.4, 27.89, 9.17, 0.92, 28.9],
    [cometEllipticalNames.olbers, 1956.46, 150.0, 85.4, 69.47, 16.84, 0.93, 44.6],
    [cometEllipticalNames.ponsBrooks, 1954.39, 94.2, 255.2, 70.98, 17.2, 0.96, 74.2],
    [cometEllipticalNames.halley, 1986.112, 170.011, 58.154, 76.0081, 17.9435, 0.9673, 162.2384]
];

/**
 * Comet Parabolic Data 
 * 
 * Elements:
 *   0: comet_name
 *   1: epochPeriDay
 *   2: epochPeriMonth
 *   3: epochPeriYear
 *   4: argPeri
 *   5: node
 *   6: periDist
 *   7: incl 
 */
const cometParabolicData = [
    [cometParabolicNames.kohler, 10.5659, 11, 1977, 163.4799, 181.8175, 0.990662, 48.7196]
];

function getCometEllipticalData(cometName) {
    let [comet_name, epoch_EpochOfPerihelion, peri_LongitudeOfPerihelion, node_LongitudeOfAscendingNode, period_PeriodOfOrbit, axis_SemiMajorAxisOfOrbit, ecc_EccentricityOfOrbit, incl_InclinationOfOrbit] = ["not found", -99, -99, -99, -99, -99, -99, -99]

    for (let iLoop = 0; iLoop < cometEllipticalData.length; iLoop++) {
        if (cometEllipticalData[iLoop][0] == cometName) {
            comet_name = String(cometEllipticalData[iLoop][0]);
            epoch_EpochOfPerihelion = Number(cometEllipticalData[iLoop][1]);
            peri_LongitudeOfPerihelion = Number(cometEllipticalData[iLoop][2]);
            node_LongitudeOfAscendingNode = Number(cometEllipticalData[iLoop][3]);
            period_PeriodOfOrbit = Number(cometEllipticalData[iLoop][4]);
            axis_SemiMajorAxisOfOrbit = Number(cometEllipticalData[iLoop][5]);
            ecc_EccentricityOfOrbit = Number(cometEllipticalData[iLoop][6]);
            incl_InclinationOfOrbit = Number(cometEllipticalData[iLoop][7]);

            break;
        }
    }

    return [comet_name, epoch_EpochOfPerihelion, peri_LongitudeOfPerihelion, node_LongitudeOfAscendingNode, period_PeriodOfOrbit, axis_SemiMajorAxisOfOrbit, ecc_EccentricityOfOrbit, incl_InclinationOfOrbit];
};

function getCometParabolicData(cometName) {
    let [comet_name, epochPeriDay, epochPeriMonth, epochPeriYear, argPeri, node, periDist, incl] = ["not found", -99, -99, -99, -99, -99, -99, -99];

    for (let iLoop = 0; iLoop < cometParabolicData.length; iLoop++) {
        if (cometParabolicData[iLoop][0] == cometName) {
            comet_name = String(cometParabolicData[iLoop][0]);
            epochPeriDay = Number(cometParabolicData[iLoop][1]);
            epochPeriMonth = Number(cometParabolicData[iLoop][2]);
            epochPeriYear = Number(cometParabolicData[iLoop][3]);
            argPeri = Number(cometParabolicData[iLoop][4]);
            node = Number(cometParabolicData[iLoop][5]);
            periDist = Number(cometParabolicData[iLoop][6]);
            incl = Number(cometParabolicData[iLoop][7]);

            break;
        }
    }

    return [comet_name, epochPeriDay, epochPeriMonth, epochPeriYear, argPeri, node, periDist, incl];
}


module.exports = {
    cometEllipticalNames,
    cometParabolicNames,
    cometEllipticalData,
    cometParabolicData,
    getCometEllipticalData,
    getCometParabolicData
};