using TechKey = Volpe.Cafe.TechKeys.TechKey128;

namespace Volpe.Cafe.MarketData.Design
{
    /// <summary>
    /// Defines basic information about an <see cref="IOEMProduct"/> produced by a manufacturer, with descriptions of
    /// its engineering characteristics.
    /// </summary>
    /// <remarks>
    /// The basic information may be defined for either an <see cref="IOEMProduct"/>'s baseline state (as specified by
    /// the <see cref="IOEMProduct.BaselineInfo"/>) or for a specific revision year (specified by the
    /// <see cref="IOEMProduct.RevisionInfo"/>). For revision information, however, an interface inheriting from this
    /// one (<see cref="IOEMProductRevision"/>) is used instead.
    /// <br/><br/>
    /// The basic product information includes a unique code assigned to the <see cref="IOEMProduct"/>, the name of the
    /// manufacturer that produces the <see cref="IOEMProduct"/>, the <see cref="IOEMProduct"/>'s refresh and redesign
    /// schedules, and a <see cref="TechKeys.TechKey128"/> defining the technology utilization for the
    /// <see cref="IOEMProduct"/>.
    /// </remarks>
    /// <seealso cref="IOEMProduct"/>
    /// <seealso cref="IOEMProductRevision"/>
    public interface IOEMProductInfo
    {
        /// <summary>
        /// Gets the unique code assigned to the <see cref="IOEMProduct"/>.
        /// </summary>
        int Code { get; }

        /// <summary>
        /// Gets the name of the manufacturer that produces the <see cref="IOEMProduct"/>.
        /// </summary>
        string ManufacturerName { get; }

        /// <summary>
        /// Gets the list of model years representing when the <see cref="IOEMProduct"/> is redesigned.
        /// </summary>
        ModelYearKey RedesignYears { get; }

        /// <summary>
        /// Gets the list of model years representing when the <see cref="IOEMProduct"/> is refreshed.
        /// </summary>
        ModelYearKey RefreshYears { get; }

        /// <summary>
        /// Gets the technology key, representing the technology configuration associated with the
        /// <see cref="IOEMProduct"/>.
        /// </summary>
        TechKey TechKey { get; }

    }
}
