using AutoMapper;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Services;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Trees;
namespace Umbraco.Web.Models.Mapping
{
///
/// Declares model mappings for media.
///
internal class MediaMapperProfile : Profile
{
public MediaMapperProfile(
TabsAndPropertiesResolver tabsAndPropertiesResolver,
ContentTreeNodeUrlResolver contentTreeNodeUrlResolver,
MediaAppResolver mediaAppResolver,
IUserService userService,
ILocalizedTextService textService,
IDataTypeService dataTypeService,
IMediaService mediaService,
IMediaTypeService mediaTypeService,
ILogger logger)
{
// create, capture, cache
var mediaOwnerResolver = new OwnerResolver(userService);
var childOfListViewResolver = new MediaChildOfListViewResolver(mediaService, mediaTypeService);
var mediaTypeBasicResolver = new ContentTypeBasicResolver();
//FROM IMedia TO MediaItemDisplay
CreateMap()
.ForMember(dest => dest.Udi, opt => opt.MapFrom(content => Udi.Create(Constants.UdiEntityType.Media, content.Key)))
.ForMember(dest => dest.Owner, opt => opt.ResolveUsing(src => mediaOwnerResolver.Resolve(src)))
.ForMember(dest => dest.Icon, opt => opt.MapFrom(content => content.ContentType.Icon))
.ForMember(dest => dest.ContentTypeAlias, opt => opt.MapFrom(content => content.ContentType.Alias))
.ForMember(dest => dest.IsChildOfListView, opt => opt.ResolveUsing(childOfListViewResolver))
.ForMember(dest => dest.Trashed, opt => opt.MapFrom(content => content.Trashed))
.ForMember(dest => dest.ContentTypeName, opt => opt.MapFrom(content => content.ContentType.Name))
.ForMember(dest => dest.Properties, opt => opt.Ignore())
.ForMember(dest => dest.TreeNodeUrl, opt => opt.ResolveUsing(contentTreeNodeUrlResolver))
.ForMember(dest => dest.Notifications, opt => opt.Ignore())
.ForMember(dest => dest.Errors, opt => opt.Ignore())
.ForMember(dest => dest.Published, opt => opt.Ignore())
.ForMember(dest => dest.Edited, opt => opt.Ignore())
.ForMember(dest => dest.Updater, opt => opt.Ignore())
.ForMember(dest => dest.Alias, opt => opt.Ignore())
.ForMember(dest => dest.IsContainer, opt => opt.Ignore())
.ForMember(dest => dest.Tabs, opt => opt.ResolveUsing(tabsAndPropertiesResolver))
.ForMember(dest => dest.AdditionalData, opt => opt.Ignore())
.ForMember(dest => dest.ContentType, opt => opt.ResolveUsing(mediaTypeBasicResolver))
.ForMember(dest => dest.MediaLink, opt => opt.ResolveUsing(content => string.Join(",", content.GetUrls(UmbracoConfig.For.UmbracoSettings().Content, logger))))
.ForMember(dest => dest.ContentApps, opt => opt.ResolveUsing(mediaAppResolver));
//FROM IMedia TO ContentItemBasic
CreateMap>()
.ForMember(dest => dest.Udi, opt => opt.MapFrom(src => Udi.Create(Constants.UdiEntityType.Media, src.Key)))
.ForMember(dest => dest.Owner, opt => opt.ResolveUsing(src => mediaOwnerResolver.Resolve(src)))
.ForMember(dest => dest.Icon, opt => opt.MapFrom(src => src.ContentType.Icon))
.ForMember(dest => dest.Trashed, opt => opt.MapFrom(src => src.Trashed))
.ForMember(dest => dest.ContentTypeAlias, opt => opt.MapFrom(src => src.ContentType.Alias))
.ForMember(dest => dest.Published, opt => opt.Ignore())
.ForMember(dest => dest.Edited, opt => opt.Ignore())
.ForMember(dest => dest.Updater, opt => opt.Ignore())
.ForMember(dest => dest.Alias, opt => opt.Ignore())
.ForMember(dest => dest.AdditionalData, opt => opt.Ignore());
//FROM IMedia TO ContentItemDto
CreateMap();
//.ForMember(dest => dest.Udi, opt => opt.MapFrom(src => Udi.Create(Constants.UdiEntityType.Media, src.Key)))
//.ForMember(dest => dest.Owner, opt => opt.ResolveUsing(src => mediaOwnerResolver.Resolve(src)))
//.ForMember(dest => dest.Published, opt => opt.Ignore())
//.ForMember(dest => dest.Edited, opt => opt.Ignore())
//.ForMember(dest => dest.Updater, opt => opt.Ignore())
//.ForMember(dest => dest.Icon, opt => opt.Ignore())
//.ForMember(dest => dest.Alias, opt => opt.Ignore())
//.ForMember(dest => dest.AdditionalData, opt => opt.Ignore());
}
}
}