/* Copyright 2002-2023 CS GROUP
 * Licensed to CS GROUP (CS) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * CS licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.orekit.files.ilrs;

import org.orekit.time.AbsoluteDate;
import org.orekit.time.DateComponents;

/**
 * Container for common data contains in International Laser Ranging Service (ILRS) files header.
 * @see CPFHeader
 * @see CRDHeader
 * @author Bryan Cazabonne
 * @since 10.3
 */
public abstract class ILRSHeader {

    /** File format. */
    private String format;

    /** File version. */
    private int version;

    /** Date component of the ephemeris production. */
    private DateComponents productionEpoch;

    /** Hour of ephemeris production. */
    private int productionHour;

    /** Target name from official ILRS list (e.g. lageos1). */
    private String name;

    /** ILRS Satellite ID. */
    private String ilrsSatelliteId;

    /** SIC (Provided by ILRS; set to “-1” for targets without SIC). */
    private String sic;

    /** NORAD ID. */
    private String noradId;

    /** Target class. */
    private int targetClass;

    /** Target location (Earth orbit, Lunar orbit, Mars orbit, ...) .*/
    private int targetLocation;

    /** Starting epoch (UTC). */
    private AbsoluteDate startEpoch;

    /** Ending epoch (UTC). */
    private AbsoluteDate endEpoch;

    /** Sequence number. */
    private int sequenceNumber;

    /**
     * Get the file format.
     * @return the file format
     */
    public String getFormat() {
        return format;
    }

    /**
     * Set the file format.
     * @param format the format to set
     */
    public void setFormat(final String format) {
        this.format = format;
    }

    /**
     * Get the format version.
     * @return the format version
     */
    public int getVersion() {
        return version;
    }

    /**
     * Set the format version.
     * @param version the version to set
     */
    public void setVersion(final int version) {
        this.version = version;
    }

    /**
     * Get the date component of the ephemeris production.
     * @return the date component of the ephemeris production
     */
    public DateComponents getProductionEpoch() {
        return productionEpoch;
    }

    /**
     * Set the date component of the ephemeris production.
     * @param productionEpoch the date component to set
     */
    public void setProductionEpoch(final DateComponents productionEpoch) {
        this.productionEpoch = productionEpoch;
    }

    /**
     * Get the hour of ephemeris production (UTC).
     * @return the hour of ephemeris production
     */
    public int getProductionHour() {
        return productionHour;
    }

    /**
     * Set the hour of ephemeris production.
     * @param productionHour the hour of ephemeris production to set
     */
    public void setProductionHour(final int productionHour) {
        this.productionHour = productionHour;
    }

    /**
     * Get the satellite target name.
     * @return the satellite target name
     */
    public String getName() {
        return name;
    }

    /**
     * Set the satellite target name.
     * @param name the satellite target name to set
     */
    public void setName(final String name) {
        this.name = name;
    }

    /**
     * Get the IRLS satellite ID (based on COSPAR ID).
     * @return the IRLS satellite ID
     */
    public String getIlrsSatelliteId() {
        return ilrsSatelliteId;
    }

    /**
     * Set the IRLS satellite ID (based on COSPAR ID).
     * @param ilrsSatelliteId the IRLS satellite ID to set
     */
    public void setIlrsSatelliteId(final String ilrsSatelliteId) {
        this.ilrsSatelliteId = ilrsSatelliteId;
    }

    /**
     * Get the SIC ID.
     * @return the SIC ID
     */
    public String getSic() {
        return sic;
    }

    /**
     * Set the SIC ID.
     * @param sic the SIC ID to set
     */
    public void setSic(final String sic) {
        this.sic = sic;
    }

    /**
     * Get the satellite NORAD ID (i.e. Satellite Catalog Number).
     * @return the satellite NORAD ID
     */
    public String getNoradId() {
        return noradId;
    }

    /**
     * Set the satellite NORAD ID.
     * @param noradId the NORAD ID to set
     */
    public void setNoradId(final String noradId) {
        this.noradId = noradId;
    }

    /**
     * Get the target class.
     * <p>
     * 0 = no retroreflector; 1 = passive retroreflector; ...
     * </p>
     * @return the target class
     */
    public int getTargetClass() {
        return targetClass;
    }

    /**
     * Set the target class.
     * <p>
     * 0 = no retroreflector; 1 = passive retroreflector; ...
     * </p>
     * @param targetClass the target class to set
     */
    public void setTargetClass(final int targetClass) {
        this.targetClass = targetClass;
    }

    /**
     * Get the target location.
     * <p>
     * 1 = Earth orbit; 2 = Lunar orbit; ...
     * </p>
     * @return the target location
     */
    public int getTargetLocation() {
        return targetLocation;
    }

    /**
     * Set the target location.
     * <p>
     * 1 = Earth orbit; 2 = Lunar orbit; ...
     * </p>
     * @param targetLocation the target location to set
     */
    public void setTargetLocation(final int targetLocation) {
        this.targetLocation = targetLocation;
    }

    /**
     * Get the starting epoch (UTC).
     * @return the starting epoch
     */
    public AbsoluteDate getStartEpoch() {
        return startEpoch;
    }

    /**
     * Set the staring epoch (UTC).
     * @param startEpoch the starting epoch to set
     */
    public void setStartEpoch(final AbsoluteDate startEpoch) {
        this.startEpoch = startEpoch;
    }

    /**
     * Get the ending epoch (UTC).
     * @return the ending epoch
     */
    public AbsoluteDate getEndEpoch() {
        return endEpoch;
    }

    /**
     * Set the ending epoch (UTC).
     * @param endEpoch the ending epoch to set
     */
    public void setEndEpoch(final AbsoluteDate endEpoch) {
        this.endEpoch = endEpoch;
    }

    /**
     * Get the ephemeris sequence number.
     * @return the ephemeris sequence number
     */
    public int getSequenceNumber() {
        return sequenceNumber;
    }

    /**
     * Set the ephemeris sequence number.
     * @param sequenceNumber the ephemeris sequence number to set
     */
    public void setSequenceNumber(final int sequenceNumber) {
        this.sequenceNumber = sequenceNumber;
    }

}
