namespace Wayne.Lib
{
    /// <summary>
    /// Keeps track of versions in an application.
    /// </summary>
    public interface IVersionProvider
    {
        /// <summary>
        /// Main component version of the current process.
        /// </summary>
        VersionNumber ReleaseComponentVersion { get; }

        /// <summary>
        /// Gets the version for a sub component.
        /// </summary>
        /// <typeparam name="TVersionIdentifier"></typeparam>
        /// <param name="versionIdentifier"></param>
        /// <returns></returns>
        VersionNumber GetVersion<TVersionIdentifier>(TVersionIdentifier versionIdentifier);

        ///<summary>
        /// Sets the version for a sub component
        ///</summary>
        ///<param name="versionIdentifier"></param>
        ///<param name="versionNumber"></param>
        ///<typeparam name="TVersionIdentifier"></typeparam>
        void SetVersion<TVersionIdentifier>(TVersionIdentifier versionIdentifier, VersionNumber versionNumber);
    }
}