using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Session;
using System;
using System.Collections.Generic;
namespace MediaBrowser.Controller.Dto
{
    /// 
    /// Interface IDtoService
    /// 
    public interface IDtoService
    {
        /// 
        /// Gets the user dto.
        /// 
        /// The user.
        /// UserDto.
        UserDto GetUserDto(User user);
        /// 
        /// Gets the session info dto.
        /// 
        /// The session.
        /// SessionInfoDto.
        SessionInfoDto GetSessionInfoDto(SessionInfo session);
        /// 
        /// Gets the dto id.
        /// 
        /// The item.
        /// System.String.
        string GetDtoId(BaseItem item);
        /// 
        /// Gets the user item data dto.
        /// 
        /// The data.
        /// UserItemDataDto.
        UserItemDataDto GetUserItemDataDto(UserItemData data);
        /// 
        /// Gets the item by dto id.
        /// 
        /// The id.
        /// The user id.
        /// BaseItem.
        BaseItem GetItemByDtoId(string id, Guid? userId = null);
        /// 
        /// Attaches the primary image aspect ratio.
        /// 
        /// The dto.
        /// The item.
        void AttachPrimaryImageAspectRatio(IItemDto dto, IHasImages item);
        /// 
        /// Gets the base item dto.
        /// 
        /// The item.
        /// The fields.
        /// The user.
        /// The owner.
        /// Task{BaseItemDto}.
        BaseItemDto GetBaseItemDto(BaseItem item, List fields, User user = null, BaseItem owner = null);
        /// 
        /// Gets the item by name dto.
        /// 
        /// The item.
        /// The fields.
        /// The user.
        /// BaseItemDto.
        BaseItemDto GetItemByNameDto(T item, List fields, User user = null)
            where T : BaseItem, IItemByName;
        /// 
        /// Gets the chapter information dto.
        /// 
        /// The chapter information.
        /// The item.
        /// ChapterInfoDto.
        ChapterInfoDto GetChapterInfoDto(ChapterInfo chapterInfo, BaseItem item);
        /// 
        /// Gets the item by name dto.
        /// 
        /// The item.
        /// The fields.
        /// The tagged items.
        /// The user.
        /// BaseItemDto.
        BaseItemDto GetItemByNameDto(T item, List fields, List taggedItems, User user = null)
            where T : BaseItem, IItemByName;
    }
}