namespace Gremlin_BlazorServer.Data.EntityClasses
{
	public class Quote : IMetadata
	{
		//primary key:
		public uint QuoteId { get; set; }

		//foreign keys:
		public uint ContactId { get; set; }

		//navigation properties:
		public Contact Recipient { get; set; } = new Contact();
		public IList<LineItem> LineItems { get; set; } = new List<LineItem>();

		//class properties:
		public Contact SalesRep { get; set; } = new Contact();
		public string QuotationNumber { get; set; } = string.Empty;
		public DateTime QuotationDate { get; set; } = DateTime.Now;
		public DateTime ValidUntil { get; set; } = DateTime.Now.AddDays(60);
		public byte ValidFor { get; set; } = 60;
		public decimal TotalListprice { get; set; }
		public decimal TotalDiscount { get; set; }
		public decimal TotalNet { get; set; }
		public float VAT { get; set; } = 19f;
		public decimal TotalGross { get; set; }
		public bool QuoteContains3PP { get; set; }
		public bool QuoteContainsRB { get; set; }
		public string QuoteTemplate { get; set; } = string.Empty;
		
		//new properties
		public int Warranty { get; set; } = 12;
		public decimal TotalFreightOnly { get; set; }
		public decimal TotalFreight {  get; set; }
		public decimal TotalVAT { get; set; }
		public decimal Freight { get; set; }

		//metadata:
		public DateTime DataCreationDate { get; set; } = DateTime.Now;
		public string DataModificationByUser { get; set; } = string.Empty;
		public DateTime DataModificationDate { get; set; } = DateTime.Now;
		public string DataStatus { get; set; } = "Active";
		public DateTime DataValidFrom { get; set; } = DateTime.Now;
		public DateTime DataValidUntil { get; set; } = DateTime.MaxValue;
		public string DataVersionComment { get; set; } = string.Empty;
		public uint DataVersionNumber { get; set; }

		//constructor
		public Quote() { }

		public Quote(Contact salesRep, bool randomQuoteNumber = true)
		{
			SalesRep = salesRep;
			if (randomQuoteNumber)
			{
				Random random = new();
				QuotationNumber = SalesRep.LastName switch
				{
					"Woitschetzki" => $"DE-83PE89-{DateTime.Now:My}-{random.Next(999999)}",
					"Welsch" => $"DE-83RE32-{DateTime.Now:My}-{random.Next(999999)}",
					_ => $"DE-XXYYXX-{DateTime.Now:My}-{random.Next(999999)}",
				};
			}
		}
	}
}
