using Volpe.Cafe.MarketData.Design;
using Volpe.Cafe.ModelSettings;

namespace Volpe.Cafe.EffectsModels
{
    /// <summary>
    /// Defines basic information about an analysis, representative historic, or aggregate vehicle, with descriptions
    /// of its engineering characteristics, and containing the additional data required for effects modeling.
    /// </summary>
    public interface IEffectsVehicle : IVehicleInfo
    {
        /// <summary>
        /// Gets the model year representing the <see cref="IEffectsVehicle"/>'s latest revision or production year.
        /// </summary>
        int RevisionYear { get; }

        /// <summary>
        /// Gets the "adjusted" fuel economy rating of the vehicle, for effects modeling.
        /// </summary>
        /// <remarks>
        /// The "adjusted" fuel economy rating of the vehicle is computed from the effects modeling perspective, which
        /// is not the same as the fuel economy rating used for compliance purposes.
        /// <br/><br/>
        /// For more information, refer to: <see cref="Effects.CalcRatedVehicleFE(Scenario, int, IVehicleInfo)"/>.
        /// </remarks>
        FuelValue RatedFE { get; }
        /// <summary>
        /// Gets the "on-road" fuel economy rating of the vehicle, for effects modeling.
        /// </summary>
        /// <remarks>
        /// The "on-road" fuel economy rating of the vehicle is computed from the associated "adjusted" fuel economy
        /// rating (<see cref="RatedFE"/>), by applying an on-road gap applicable to the specified vehicle style.
        /// <br/><br/>
        /// See also: <see cref="Effects.ConvertToRatedFE(FuelValue, VehicleStyle, ModelingSettings)"/>.
        /// </remarks>
        FuelValue OnRoadFE { get; }

        /// <summary>
        /// Gets the CAFE fuel economy rating of the vehicle for each fuel type, based on the baseline (or initial)
        /// state of the vehicle.
        /// </summary>
        FuelValue InitFuelEconomy { get; }
        /// <summary>
        /// Gets the "adjusted" fuel economy rating of the vehicle, for effects modeling, based on the baseline (or
        /// initial) state of the vehicle.
        /// </summary>
        /// <inheritdoc cref="RatedFE"/>
        FuelValue InitRatedFE { get; }
        /// <summary>
        /// Gets the "on-road" fuel economy rating of the vehicle, for effects modeling, based on the baseline (or
        /// initial) state of the vehicle.
        /// </summary>
        /// <inheritdoc cref="OnRoadFE"/>
        FuelValue InitOnRoadFE { get; }
        /// <summary>
        /// Gets the percent share that the vehicle operates on for each fuel type, based on the baseline (or initial)
        /// state of the vehicle.
        /// </summary>
        FuelValue InitFuelShare { get; }
        /// <summary>
        /// Gets the type(s) of fuel used by the vehicle, based on the baseline (or initial) state of the vehicle.
        /// </summary>
        FuelType InitFuelType { get; }
        /// <summary>
        /// Gets the vehicle's curb weight, based on the baseline (or initial) state of the vehicle.
        /// </summary>
        double InitCurbWeight { get; }

        /// <summary>
        /// Gets the portion of vehicle's sales or on-road fleet to use during effects modeling for estimating
        /// cumulative (i.e., total) fuel consumption and vehicle miles traveled.
        /// </summary>
        /// <remarks>
        /// This value should typically be applicable to representative historic vehicles. Otherwise, this value should
        /// be set to 1 (one).
        /// </remarks>
        double FleetShare { get; }
        /// <summary>
        /// Gets whether this <see cref="IEffectsVehicle"/> provides information for a representative historic vehicle.
        /// </summary>
        bool IsHistoric { get; }

    }
}
