using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using UnivateProperties_API.Containers.Property;
using UnivateProperties_API.Model.ProcessFlow;
using UnivateProperties_API.Model.Region;
using UnivateProperties_API.Model.Timeshare;
using UnivateProperties_API.Model.Users;

namespace UnivateProperties_API.Model.Properties
{
    public class Property : BaseEntity
    {        
        #region Properties        
        [ForeignKey("PropertyType")]        
        public int PropertyTypeId { get; set; }
        public string PropertyName { get; set; }
        public string Unit { get; set; }
        public decimal OperationalCosts { get; set; }           
        public decimal Price { get; set; }
        public string PricePer { get; set; }
        public bool IsSale { get; set; }
        public string Description { get; set; }
        public string ShortDescription { get; set; }
        public string AddressLine1 { get; set; }
        public string AddressLine2 { get; set; }
        public string AddressLine3 { get; set; }
        public int SuburbId { get; set; }
        public int CityId { get; set; }
        public int ProvinceId { get; set; }
        public bool Published { get; set; }
        [ForeignKey("Status")]
        public int? StatusId { get; set; }
        [ForeignKey("Owner")]
        public int? OwnerId { get; set; }
        [ForeignKey("Agent")]
        public int? AgentId { get; set; }
        [ForeignKey("Agency")]
        public int? AgencyId { get; set; }
        public int? GCRecord { get; set; }

        public virtual PropertyType PropertyType { get; set; }
        public virtual Province Province { get; set; }
        public virtual City City { get; set; }
        public virtual Suburb Suburb { get; set; }
        public virtual Status Status { get; set; }
        public virtual Individual Owner { get; set; }
        public virtual Agent Agent { get; set; }
        public virtual Agency Agency { get; set; }

        public ICollection<PropertyUserField> PropertyUserFields { get; set; }
        public ICollection<PropertyImage> PropertyImages { get; set; }
        public ICollection<BidItem> BidItems { get; set; }
        public ICollection<ProcessFlow.ProcessFlow> ProcessFlows { get; set; }

        [NotMapped]
        public List<PropertyDetailGroup> DisplayData { get; set; }
        #endregion
    }
}