using System;
using System.Collections.Generic;
using Volpe.Cafe.Initializers;

namespace Volpe.Cafe.ModelSettings
{
    /// <summary>
    /// Provides compliance and effects parameters for the modeling system.
    /// </summary>
    [Serializable]
    public sealed class Parameters
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="Parameters"/> class.
        /// </summary>
        public Parameters(Dictionary<string, object> values)
        {
            DataObjectInitializer.SetPropertyValues(this, values);
        }


        /// <summary>Gets the economic values for benefits computations.</summary>
        public EconomicValues EconomicValues { get; private set; }
        /// <summary>Gets the proportion of original vehicles sales surviving at each vehicle age.</summary>
        public VehicleAgeData SurvivalRates { get; private set; }
        /// <summary>Gets the annual miles driven by vehicles at each vehicle age.</summary>
        public VehicleAgeData MilesDriven { get; private set; }
        /// <summary>Gets a forecast of fuel prices per calendar year for all supported fuel types.</summary>
        public FuelPrices FuelPrices { get; private set; }
        /// <summary>Gets the historic fleet data by vehicle class.</summary>
        public HistoricFleetData HistoricFleetData { get; private set; }

        /// <summary>Gets the parameters for use with the Dynamic Fleet Share (DFS) model.</summary>
        public DynamicFleetShareModelValues DfsModelValues { get; private set; }
        /// <summary>Gets the parameters for use with the Sales Response (SR) model.</summary>
        public SalesModelValues SalesModelValues { get; private set; }
        /// <summary>Gets the parameters for use with the Scrappage model.</summary>
        public DynamicScrappageModelValues ScrappageModelValues { get; private set; }

        /// <summary>Gets the values necessary for safety calculations.</summary>
        public SafetyValues SafetyValues { get; private set; }
        /// <summary>Gets the fatality rates by model year and vehicle age.</summary>
        public FatalityRates FatalityRates { get; private set; }
        /// <summary>Gets the fine tuning parameters for using credit trading in the modeling system.</summary>
        public CreditTradingValues CreditTradingValues { get; private set; }
        /// <summary>Gets the fine tuning parameters for using ZEV credits in the modeling system.</summary>
        public ZEVCreditValues ZEVCreditValues { get; private set; }
        /// <summary>Gets the parameters for calculating employment effects.</summary>
        public EmploymentValues EmploymentValues { get; private set; }
        /// <summary>Gets the physical and chemical properties of various fuel types.</summary>
        public FuelProperties FuelProperties { get; private set; }
        /// <summary>Gets a collection of fuel import assumptions for various fuel types by calendar year.</summary>
        public FuelImportAssumptionsCollection FuelImportAssumptions { get; private set; }

        /// <summary>Gets various health impacts associated with emissions arising from various pollutants.</summary>
        public EmissionHealthImpacts EmissionHealthImpacts { get; private set; }
        /// <summary>Gets the costs arising from greenhouse emission damage.</summary>
        public GreenhouseEmissionCosts GreenhouseEmissionCosts { get; private set; }
        /// <summary>Gets the costs arising from criteria emission damage.</summary>
        public CriteriaEmissionCosts CriteriaEmissionCosts { get; private set; }

        /// <summary>
        /// Gets a collection of upstream emissions, in grams/million BTU, for various fuel types (from all stages of
        /// fuel production and distribution) by calendar year.
        /// </summary>
        public UpstreamEmissions UpstreamEmissions { get; private set; }
        /// <summary>
        /// Gets the tailpipe emissions, in grams/mile, arising from gasoline operation by model year and age.
        /// </summary>
        public TailpipeEmissions TailpipeGasoline { get; private set; }
        /// <summary>
        /// Gets the tailpipe emissions, in grams/mile, arising from diesel operation by model year and age.
        /// </summary>
        public TailpipeEmissions TailpipeDiesel { get; private set; }
        /// <summary>
        /// Gets the brake and tire wear emission rates, in grams/mile, for various vehicle classes and fuel types.
        /// </summary>
        public BrakeTireWearEmissions BrakeTireWearEmissions { get; private set; }

    }
}
