using Bp.Sync.Domain.Entities.BaseEntities;
using Bp.Sync.Domain.Entities.SyncDavs;
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace Bp.Sync.Domain.Entities.FcBusinesses.Bills
{
    public class InboundBill : BaseEntityByLong
    {
        [MaxLength(256)]
        public string Code { get; set; }

        [MaxLength(1024)]
        public string Title { get; set; }

        public int? OriginBranchId { get; set; }
        public int? DestinationBranchId { get; set; }
        public BillStatus BillStatus { get; set; }
        public int? PartnerId { get; set; }
        public int BranchId { get; set; }
        public int ExpertId { get; set; }
        public decimal TotalInboundDiscount { get; set; }
        public decimal TotalInboundPrice { get; set; }
        public decimal TotalInboundCost { get; set; }

        [MaxLength(1024)]
        public string Note { get; set; }

        public decimal Quantity { get; set; }

        [MaxLength(256)]
        public string InvoiceCode { get; set; }

        public BillType BillType { get; set; }
        public DateTimeOffset? InvoiceDate { get; set; }
        public int CompletedBy { get; set; }

        [MaxLength(155)]
        public string CompletedByUserName { get; set; }

        public DateTimeOffset? CompletedDate { get; set; }

        [MaxLength(256)]
        public string HeadQuarterOutboundBillCode { get; set; }

        public long? HeadQuarterOutboundBillId { get; set; }
        public SyncDavStatus SyncDavStatus { get; set; }
    }

    public enum BillStatus
    {
        [Description("Tạo mới")]
        Created = 1,

        [Description("Đang xử lý")]
        Processing = 2,

        [Description("Hoàn thành")]
        Done = 3
    }

    public enum OutboundBillStatus
    {
        [Description("Tạo mới")]
        Created = 1,

        [Description("Đang xử lý")]
        Processing = 2,

        [Description("Đã xác nhận")]
        Confirmed = 3,

        [Description("Hoàn thành")]
        Done = 4
    }

    public enum BillType
    {
        [Description("Phiếu nhập kho từ kho tổng")]
        InboundBillFromHeadquarters = 1,

        [Description("Phiếu nhập kho từ đối tác")]
        InboundBillFromPartner = 2,

        [Description("Phiếu kiểm kho tại chi nhánh")]
        InventoryBillByBranch = 3,

        [Description("Phiếu kiểm kho theo người bán")]
        InventoryBillBySeller = 4,

        [Description("Phiếu kiểm kho theo nhà cung cấp")]
        InventoryBillByPartner = 5,

        [Description("Phiếu kiểm kho theo phiếu bán hàng")]
        InventoryBillByReceiptBill = 6,

        [Description("Phiếu kiểm kho theo thời gian nhập")]
        InventoryBillByInboundTime = 7,

        [Description("Phiếu xuất hàng trả đối tác")]
        OutboundBillToPartner = 13,

        [Description("Phiếu xuất hàng đến chi nhánh khác")]
        OutboundBillToBranch = 14,

        [Description("Phiếu bán sỉ")]
        WholesaleReceiptBill = 15,

        [Description("Phiếu bán lẻ")]
        RetailReceiptBill = 16,

        [Description("Phiếu khách trả hàng")]
        CustomerReturnBill = 17,

        [Description("Phiếu nhập bù")]
        BalanceInboundBill = 18,

        [Description("Phiếu xuất bù")]
        BalanceOutboundBill = 19,

        [Description("Phiếu kiểm kho con")]
        NestInventoryBill = 20,

        [Description("Phiếu chi")]
        PaymentVoucher = 21,

        [Description("Phiếu thu")]
        ReceiptVoucher = 22,

        [Description("Phiếu nhập bù hàng chưa kiểm")]
        NeedCheckBalanceInboundBill = 23,

        [Description("Phiếu xuất bù hàng chưa kiểm")]
        NeedCheckBalanceOutboundBill = 24,

        [Description("Phiếu kiểm kho theo sản phẩm")]
        InventoryBillByProduct = 25,

        [Description("Phiếu nhập kho từ chi nhánh khác")]
        InboundBillFromBranch = 26,

        [Description("Phiếu xuất hàng trả kho tổng")]
        OutboundBillToWarehouse = 27,
    }
}