using System;
using System.Collections.Generic;
using AyaNova.Biz;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
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
    //NOTE: In Widget DB schema only name and serial are not nullable
    public class Widget : ICoreBizObjectModel
    {
        public long Id { get; set; }
        public uint Concurrency { get; set; }

        [Required]
        public string Name { get; set; }
        public long Serial { get; set; }
        public decimal? DollarAmount { get; set; }
        public bool? Active { get; set; }
        public UserType UserType { get; set; }
        public DateTime? StartDate { get; set; }
        public DateTime? EndDate { get; set; }
        public string Notes { get; set; }
        public int? Count { get; set; }
        public string Wiki { get; set; }
        public string CustomFields { get; set; }
        public List<string> Tags { get; set; }
        //relations
        //https://docs.microsoft.com/en-us/ef/core/modeling/relationships#other-relationship-patterns
        [JsonIgnore]//hide from being returned (as null anyway) with User object in routes
        public User User { get; set; }

        public long? UserId { get; set; }

        public Widget()
        {
            Tags = new List<string>();
        }

        [NotMapped, JsonIgnore]
        public AyaType AyaType { get => AyaType.Widget; }

    }

}
