using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace  Back.Data.Models
{
    public class InvoiceItem
    {
        #region Key
        public int ID { get; set; }
        public int CODID { get; set; }
        public int? InvoiceID { get; set; }
        #endregion

        #region autofild
        //شناسه کاال/خدمت
        [MaxLength(13)]
       // [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public string? sstid { get { return cODItem.ItemTaxID; } }
        // شرح کاال/خدمت
        [MaxLength(13)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public string? sstt { get { return cODItem != null ? cODItem.Title : null; } }
        //واحد اندازهگیری
        [MaxLength(8)]
        public string? mu { get { return cODItem != null ? cODItem.CODUnit.UnitTaxID : null; } }
        //میزان ارز
        [MaxLength(18)]
        public decimal? cfee { get { return fee / exr; } }
        //مبلغ مالیات بر ارزش افزوده
        [MaxLength(18)]
        public decimal? vam { get 
            {
                return invoice?.pattern?.inp == 9 ? fee*vra/100 :
                     invoice?.pattern?.inp == 13 ? ((tcpbs+9)/100)+((prdis*vra)/100)
                    : vra * adis / 100; 
            } }
        //جمع کل اجرت ،حق العمل و سود
        [MaxLength(18)]
        public decimal? tcpbs { get { return consfee + spro + bros; } }
        //سهم نقدی از پرداخت
        [MaxLength(18)]
        public decimal? cop { get { return (tsstam * invoice?.cap) / invoice?.tadis; } }
        //سهم مالیات بر ارزش افزوده از پرداخت
        [MaxLength(18)]
        public decimal? vop { get { return vra == 0 ? 0 : (vam * invoice?.cap) / invoice?.tadis; } }
        //مبلغ کل کالا/خدمت
        [MaxLength(18)]
        public decimal? tsstam { get 
            {
                if (invoice==null || invoice.pattern==null)
                {
                   return vam + adis;
                }
                else
                return invoice?.pattern?.inp == 9 ? fee+vam :
                    invoice?.pattern?.inp == 10 ? sscv + vam + odam + olam :
                     invoice?.pattern?.inp == 4 ? prdis + vam + odam + olam :
                  vam + adis + odam + olam; 
            } }
        //مبلغ بعد از تخفیف
        [MaxLength(18)]
        public decimal? adis { get 
            {
                return invoice?.pattern?.inp == 13 ? prdis+ tcpbs - dis: prdis - dis; 
            } }
        //مبلغ قبل از تخفیف
        [MaxLength(18)]
        public decimal? prdis { get { return am * fee; } }
        //نرخ مالیات بر ازش افزوده
        [MaxLength(5)]
        public decimal? vra { get { return cODItem != null ? cODItem.TaxRate : null; } }
        //واحد اندازه گیری عنوان
        public string? unitTitle { get { return cODItem!=null ? cODItem.CODUnit.Title : null; } }
        #endregion

        #region fild
        //تعداد/مقدار
        [MaxLength(36)]
        public decimal? am { get; set; }    
        //وزن خالص
        [MaxLength(23)]
        public decimal? nw { get; set; }
        //مبلغ واحد
        [MaxLength(36)]
        public decimal? fee { get; set; }       
        //نوع ارز
        [MaxLength(4)]
        public string? cut { get; set; }
        //نرخ برابری ارز با ریال
        [MaxLength(18)]
        public decimal? exr { get; set; }
        //ارزش ریالی کالا
        [MaxLength(18)]
        public decimal? ssrv { get; set; } = 0;
        //ارزش ارزی کالا
        [MaxLength(18)]
        public decimal? sscv { get; set; } = 0;
        //مبلغ تخفیف
        [MaxLength(18)]
        public decimal? dis { get; set; } = 0;
        //موضوع سایر مالیات و عوارض
        [MaxLength(255)]
        public string? odt { get; set; }
        //نرخ سایرمالیات و عوارض
        [MaxLength(5)]
        public decimal? odr { get; set; }
        //مبلغ سایر مالیات و عواض
        [MaxLength(18)]
        public decimal? odam { get; set; } = 0;
        //موضوع سایر وجوه قانونی
        [MaxLength(255)]
        public string? olt { get; set; }
        //نرخ سایروجوه قانونی
        [MaxLength(5)]
        public decimal? olr { get; set; }
        //مبلغ سایر وجوه قانونی
        [MaxLength(18)]
        public decimal? olam { get; set; } = 0;
        //اجرت دساخت
        [MaxLength(18)]
        public decimal? consfee { get; set; } = 0;
        //سود فروشنده
        [MaxLength(18)]
        public decimal? spro { get; set; } = 0;
        //حق العمل
        [MaxLength(18)]
        public decimal? bros { get; set; } = 0;
        //شناسه یکتای ثبت قرارداد حق العمل کاری
        [MaxLength(12)]
        public string? bsrn { get; set; }
        #endregion

        #region Navigation
        [ForeignKey("InvoiceID")]
        public virtual Invoice? invoice { get; set; }

        [ForeignKey("CODID")]
        public virtual CODItem cODItem { get; set; }
        #endregion

    }
}
