using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using FoodsharingSiegen.Contracts.Enums;

namespace FoodsharingSiegen.Contracts.Entity
{
    /// <summary>
    ///     The prospect class (a. beging, 21.05.2022)
    /// </summary>
    public class Prospect
    {
        #region Public Properties

        /// <summary>
        ///     Gets the value of the complete (ab)
        /// </summary>
        [NotMapped]
        public bool Complete => Interactions.Any(x => x.Type == InteractionType.Complete);

        /// <summary>
        ///     Gets or sets the value of the created (ab)
        /// </summary>
        public DateTime Created { get; set; }

        /// <summary>
        ///     Gets or sets the value of the fs id (ab)
        /// </summary>
        public int FsId { get; set; }

        /// <summary>
        ///     Gets or sets the value of the id (ab)
        /// </summary>
        [Key]
        public Guid Id { get; set; }

        /// <summary>
        ///     Gets or sets the value of the interactions (ab)
        /// </summary>
        public IList<Interaction> Interactions { get; set; } = new List<Interaction>();

        /// <summary>
        ///     Gets or sets the value of the memo (ab)
        /// </summary>
        public string? Memo { get; set; }

        /// <summary>
        ///     Gets or sets the value indicating the last modification date and time.
        /// </summary>
        public DateTime? Modified { get; set; }

        /// <summary>
        ///     Gets or sets the value of the name (ab)
        /// </summary>
        public string Name { get; set; } = string.Empty;

        /// <summary>
        ///     Gets or sets the state of the record within the system.
        /// </summary>
        public RecordState RecordState { get; set; }

        /// <summary>
        ///     Gets or sets the value of the warning (ab)
        /// </summary>
        public bool Warning { get; set; }

        /// <summary>
        ///     Gets or sets a token string used to securely authorize upload logic.
        /// </summary>
        public Guid? VerificationToken { get; set; }

        /// <summary>
        ///     Gets or sets uploaded identity verification images.
        /// </summary>
        public ICollection<ProspectImage>? Images { get; set; }

        #endregion
    }
}