using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using System;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Dto
{
    /// 
    /// Class UserDtoBuilder
    /// 
    public class UserDtoBuilder
    {
        /// 
        /// The _logger
        /// 
        private readonly ILogger _logger;
        /// 
        /// Initializes a new instance of the  class.
        /// 
        /// The logger.
        public UserDtoBuilder(ILogger logger)
        {
            _logger = logger;
        }
        /// 
        /// Converts a User to a DTOUser
        /// 
        /// The user.
        /// DtoUser.
        /// user
        public async Task GetUserDto(User user)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }
            var dto = new UserDto
            {
                Id = user.Id.ToString(),
                Name = user.Name,
                HasPassword = !String.IsNullOrEmpty(user.Password),
                LastActivityDate = user.LastActivityDate,
                LastLoginDate = user.LastLoginDate,
                Configuration = user.Configuration
            };
            var image = user.PrimaryImagePath;
            if (!string.IsNullOrEmpty(image))
            {
                dto.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(user, ImageType.Primary, image);
                try
                {
                    await DtoBuilder.AttachPrimaryImageAspectRatio(dto, user, _logger).ConfigureAwait(false);
                }
                catch (Exception ex)
                {
                    // Have to use a catch-all unfortunately because some .net image methods throw plain Exceptions
                    _logger.ErrorException("Error generating PrimaryImageAspectRatio for {0}", ex, user.Name);
                }
            }
            return dto;
        }
    }
}