/*
 * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu
 *
 * This software is distributed under the terms of the GNU General Public
 * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
 * the license.
 */

#pragma once

#include <corsika/geometry/Point.h>
#include <corsika/units/PhysicalUnits.h>

namespace corsika::environment {

  /**
   * An interface for refractive index models.
   *
   * This is the base interface for refractive index mixins.
   *
   */
  template <typename Model>
  class IRefractiveIndexModel : public Model {

  public:
    /**
     * Evaluate the refractive index at a given location.
     *
     * @param  point    The location to evaluate at.
     * @returns    The refractive index at this point.
     */
    virtual double GetRefractiveIndex(corsika::geometry::Point const&) const = 0;

    /**
     * A virtual default destructor.
     */
    virtual ~IRefractiveIndexModel() = default;

  }; // END: class IRefractiveIndexModel

} // namespace corsika::environment