using System;
using System.Collections.Generic;
using Jellyfin.Data.Entities;
namespace MediaBrowser.Controller
{
    /// 
    /// Manages the storage and retrieval of display preferences.
    /// 
    public interface IDisplayPreferencesManager
    {
        /// 
        /// Gets the display preferences for the user and client.
        /// 
        /// 
        /// This will create the display preferences if it does not exist, but it will not save automatically.
        /// 
        /// The user's id.
        /// The item id.
        /// The client string.
        /// The associated display preferences.
        DisplayPreferences GetDisplayPreferences(Guid userId, Guid itemId, string client);
        /// 
        /// Gets the default item display preferences for the user and client.
        /// 
        /// 
        /// This will create the item display preferences if it does not exist, but it will not save automatically.
        /// 
        /// The user id.
        /// The item id.
        /// The client string.
        /// The item display preferences.
        ItemDisplayPreferences GetItemDisplayPreferences(Guid userId, Guid itemId, string client);
        /// 
        /// Gets all of the item display preferences for the user and client.
        /// 
        /// The user id.
        /// The client string.
        /// A list of item display preferences.
        IList ListItemDisplayPreferences(Guid userId, string client);
        /// 
        /// Gets all of the custom item display preferences for the user and client.
        /// 
        /// The user id.
        /// The item id.
        /// The client string.
        /// The dictionary of custom item display preferences.
        Dictionary ListCustomItemDisplayPreferences(Guid userId, Guid itemId, string client);
        /// 
        /// Sets the custom item display preference for the user and client.
        /// 
        /// The user id.
        /// The item id.
        /// The client id.
        /// A dictionary of custom item display preferences.
        void SetCustomItemDisplayPreferences(Guid userId, Guid itemId, string client, Dictionary customPreferences);
        /// 
        /// Saves changes made to the database.
        /// 
        void SaveChanges();
    }
}