using System;
using System.Collections.Generic;
namespace Umbraco.Cms.Core.Models
{
///
/// Represents a document.
///
///
/// A document can be published, rendered by a template.
///
public interface IContent : IContentBase
{
///
/// Gets or sets the content schedule
///
ContentScheduleCollection ContentSchedule { get; set; }
///
/// Gets or sets the template id used to render the content.
///
int? TemplateId { get; set; }
///
/// Gets a value indicating whether the content is published.
///
/// The property tells you which version of the content is currently published.
bool Published { get; set; }
PublishedState PublishedState { get; set; }
///
/// Gets a value indicating whether the content has been edited.
///
/// Will return `true` once unpublished edits have been made after the version with has been published.
bool Edited { get; set; }
///
/// Gets the version identifier for the currently published version of the content.
///
int PublishedVersionId { get; set; }
///
/// Gets a value indicating whether the content item is a blueprint.
///
bool Blueprint { get; set; }
///
/// Gets the template id used to render the published version of the content.
///
/// When editing the content, the template can change, but this will not until the content is published.
int? PublishTemplateId { get; set; }
///
/// Gets the name of the published version of the content.
///
/// When editing the content, the name can change, but this will not until the content is published.
string PublishName { get; set; }
///
/// Gets the identifier of the user who published the content.
///
int? PublisherId { get; set; }
///
/// Gets the date and time the content was published.
///
DateTime? PublishDate { get; set; }
///
/// Gets a value indicating whether a culture is published.
///
///
/// A culture becomes published whenever values for this culture are published,
/// and the content published name for this culture is non-null. It becomes non-published
/// whenever values for this culture are unpublished.
/// A culture becomes published as soon as PublishCulture has been invoked,
/// even though the document might not have been saved yet (and can have no identity).
/// Does not support the '*' wildcard (returns false).
///
bool IsCulturePublished(string culture);
///
/// Gets the date a culture was published.
///
DateTime? GetPublishDate(string culture);
///
/// Gets a value indicated whether a given culture is edited.
///
///
/// A culture is edited when it is available, and not published or published but
/// with changes.
/// A culture can be edited even though the document might now have been saved yet (and can have no identity).
/// Does not support the '*' wildcard (returns false).
///
bool IsCultureEdited(string culture);
///
/// Gets the name of the published version of the content for a given culture.
///
///
/// When editing the content, the name can change, but this will not until the content is published.
/// When is null, gets the invariant
/// language, which is the value of the property.
///
string GetPublishName(string culture);
///
/// Gets the published culture infos of the content.
///
///
/// Because a dictionary key cannot be null this cannot get the invariant
/// name, which must be get via the property.
///
ContentCultureInfosCollection PublishCultureInfos { get; set; }
///
/// Gets the published cultures.
///
IEnumerable PublishedCultures { get; }
///
/// Gets the edited cultures.
///
IEnumerable EditedCultures { get; set; }
///
/// Creates a deep clone of the current entity with its identity/alias and it's property identities reset
///
///
IContent DeepCloneWithResetIdentities();
}
}