using System;
using System.Threading.Tasks;

namespace InABox.Mobile
{
    
    public class LatestVersionException : Exception
    {
        public LatestVersionException(string message)
            : base(message)
        {
        }

        public LatestVersionException(Exception innerException)
            : base("", innerException)
        {
        }

        public LatestVersionException(string message, Exception innerException)
            : base(message, innerException)
        {
        }
    }

    public class AppInfo
    {
        public String Version { get; set; }
        public DateTime Date { get; set; }
        public String Notes { get; set; }
    }

    /// <summary>
    /// LatestVersion plugin
    /// </summary>
    public interface IAppVersion
    {
        /// <summary>
        /// Gets the version number of the current app's installed version.
        /// </summary>
        /// <value>The current app's installed version number.</value>
        string InstalledVersionNumber { get; }

        /// <summary>
        /// Checks if the current app is the latest version available in the public store.
        /// </summary>
        /// <returns>True if the current app is the latest version available, false otherwise.</returns>
        Task<bool> IsUsingLatestVersion();
        
        Task<AppInfo> GetLatestVersion(bool force);
        
        /// <summary>
        /// Opens the current app in the public store.
        /// </summary>
        Task OpenAppInStore();

    }
}
