using System;
using System.Collections.Generic;
using AyaNova.Biz;
using System.ComponentModel.DataAnnotations;
using Newtonsoft.Json;

namespace AyaNova.Models
{
    //NOTE: Any non required field (nullable in DB) sb nullable here, i.e. decimal? not decimal, 
    //otherwise the server will call it an invalid record if the field isn't sent from client

    public class NotifyEvent
    {
        public long Id { get; set; }
        public uint Concurrency { get; set; }

        [Required]
        public DateTime Created { get; set; }
        public AyaType AyaType { get; set; }
        public long ObjectId { get; set; }
        [Required]
        public string Name { get; set; }//object name or closest equivalent for display
        [Required]
        public NotifyEventType EventType { get; set; }
        [Required]
        public long UserId { get; set; }
        [Required]
        public long NotifySubscriptionId { get; set; }//source subscription that triggered this event to be created
        [Required]
        public long IdValue { get; set; }
        [Required]
        public decimal DecValue { get; set; }

        //  [Required]//  public TimeSpan AgeValue { get; set; }

        //date of the event actually occuring, e.g. WarrantyExpiry date. Compared with subscription to determine if deliverable or not
        public DateTime EventDate { get; set; }
        //NO: Delivery code consults subscription instead of this
        // public DateTime? DeliverDate { get; set; }//date user wants the event notification delivered, usually same as event date but could be set earlier if Advance setting in effect. This is the date consulted for delivery only.
        public string Message { get; set; }


        public NotifyEvent()
        {
            Created = EventDate = DateTime.UtcNow;
            IdValue = 0;
            DecValue = 0;
            // AgeValue = TimeSpan.Zero;
            AyaType = AyaType.NoType;
            ObjectId = 0;
            Name = string.Empty;
        }

        public override string ToString()
        {
            return JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.None);
        }

        //linked entity
        public NotifySubscription NotifySubscription { get; set; }

    }//eoc

}//eons
