using Core.Abstractions.DomainObjects;
using Core.Abstractions.Models;
using Core.DomainObjects.Documents;
using Core.Enumerations;
using WeatherForecast.Models.Responses;
using WeatherForecast.Models.Responses.L10n;
namespace WeatherForecast.Models.Abstractions {
  
  /// 
  /// 
  /// 
  /// 
  public abstract class PostItemResponseModelBase : ResponseModelBase {
    /// 
    /// 
    /// 
    public Guid Id { get; set; }
    /// 
    /// 
    /// 
    public Guid SiteId { get; set; }
    /// 
    /// 
    /// 
    public List? L10n { get; set; }
    #region Localized costrutor
    /// 
    /// 
    /// 
    public string? Slug { get; set; }
    /// 
    /// 
    /// 
    public string? Description { get; set; }
    /// 
    /// 
    /// 
    public string? Title { get; set; }
    /// 
    /// 
    /// 
    public string? ShortText { get; set; }
    /// 
    /// 
    /// 
    public string? Text { get; set; }
    /// 
    /// 
    /// 
    public string? PlainText { get; set; }
    /// 
    /// 
    /// 
    public string? ContentType { get; set; }
    /// 
    /// 
    /// 
    public List? Badges { get; set; }
    #endregion
    /// 
    /// 
    /// 
    public List? MediaAttachemnts { get; set; }
    /// 
    /// 
    /// 
    public AuthorModel? Author { get; set; }
    /// 
    /// 
    /// 
    public DateTime Created { get; set; }
    /// 
    /// 
    /// 
    public List? Tags { get; set; }
    /// 
    /// 
    /// 
    public List? Categories { get; set; }
    /// 
    /// 
    /// 
    public bool? FamilyFriendly { get; set; }
    /// 
    /// 
    /// 
    /// 
    public PostItemResponseModelBase(PostItemBase postItem) {
      Id = postItem.Id;
      SiteId = postItem.SiteId;
      //Author = new AuthorModel(postItem.Author);
      Created = postItem.Created;
      Tags = postItem.Tags;
      FamilyFriendly = postItem.FamilyFriendly;
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    public PostItemResponseModelBase(PostItemBase postItem, List categories) : this(postItem) {
      L10n = postItem.L10n.Select(x => new PostItemL10nModel(x)).ToList();
      Categories = categories.Select(x => new CategoryItemResponseModel(x)).ToList();
      MediaAttachemnts = postItem.MediaAttachments?.Select(x => new MediaAttachmentResponseModel(x)).ToList();
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    public PostItemResponseModelBase(PostItemBase postItem, List categories, Locales locale) : this(postItem) {
      var postItemL10n = postItem.L10n.Single(x => x.Locale == locale);
      if (postItemL10n != null) {
        Slug = postItemL10n.Slug;
        Badges = postItemL10n.Badges;
        Title = postItemL10n.Title;
        ShortText = postItemL10n.ShortText;
        Text = postItemL10n.Text;
        PlainText = postItemL10n.PlainText;
        Badges = postItemL10n.Badges;
      }
      Categories = categories.Select(x => new CategoryItemResponseModel(x, locale)).ToList();
      MediaAttachemnts = postItem.MediaAttachments?.Select(x => new MediaAttachmentResponseModel(x, locale)).ToList();
    }
  }
}