namespace Grand.Domain.Messages;

/// <summary>
///     Represents a campaign
/// </summary>
public class Campaign : BaseEntity
{
    private ICollection<string> _customerGroups;
    private ICollection<string> _customerTags;
    private ICollection<string> _newsletterCategories;

    /// <summary>
    ///     Gets or sets the name
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    ///     Gets or sets the subject
    /// </summary>
    public string Subject { get; set; }

    /// <summary>
    ///     Gets or sets the body
    /// </summary>
    public string Body { get; set; }

    /// <summary>
    ///     Gets or sets the store identifier
    /// </summary>
    public string StoreId { get; set; }

    /// <summary>
    ///     Gets or sets the lang identifier
    /// </summary>
    public string LanguageId { get; set; }

    public DateTime? CustomerCreatedDateFrom { get; set; }
    public DateTime? CustomerCreatedDateTo { get; set; }
    public DateTime? CustomerLastActivityDateFrom { get; set; }
    public DateTime? CustomerLastActivityDateTo { get; set; }
    public DateTime? CustomerLastPurchaseDateFrom { get; set; }
    public DateTime? CustomerLastPurchaseDateTo { get; set; }

    public CampaignCondition CustomerHasOrders { get; set; }

    public CampaignCondition CustomerHasShoppingCart { get; set; }

    /// <summary>
    ///     Gets or sets the used email account identifier
    /// </summary>
    public string EmailAccountId { get; set; }

    /// <summary>
    ///     Gets or sets the customer tags
    /// </summary>
    public virtual ICollection<string> CustomerTags {
        get => _customerTags ??= new List<string>();
        protected set => _customerTags = value;
    }

    /// <summary>
    ///     Gets or sets the customer groups
    /// </summary>
    public virtual ICollection<string> CustomerGroups {
        get => _customerGroups ??= new List<string>();
        protected set => _customerGroups = value;
    }

    /// <summary>
    ///     Gets or sets the newsletter categories
    /// </summary>
    public virtual ICollection<string> NewsletterCategories {
        get => _newsletterCategories ??= new List<string>();
        protected set => _newsletterCategories = value;
    }
}