using Lada.Framework.Data.Domains.BaseEntities;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Lada.Framework.Data.Domains.Finance
{
    /// <summary>
    /// Hóa đơn điện tử VAT từ Tổng cục Thuế
    /// </summary>
    [Table("VatInvoices")]
    public class VatInvoice : BaseEntity
    {
        /// <summary>
        /// ID
        /// </summary>
        [Key]
        public int Id { get; set; }

        /// <summary>
        /// ID từ API Tổng cục Thuế
        /// </summary>
        [MaxLength(100)]
        public string ExternalId { get; set; }

        /// <summary>
        /// Ký hiệu mẫu số (khmshdon)
        /// </summary>
        public int TemplateCode { get; set; }

        /// <summary>
        /// Ký hiệu hóa đơn (khhdon)
        /// </summary>
        [MaxLength(50)]
        public string InvoiceSymbol { get; set; }

        /// <summary>
        /// Số hóa đơn (shdon)
        /// </summary>
        [MaxLength(50)]
        public string InvoiceNumber { get; set; }

        /// <summary>
        /// Loại hóa đơn (hdon)
        /// </summary>
        [MaxLength(10)]
        public string InvoiceType { get; set; }

        /// <summary>
        /// Ngày lập (tdlap)
        /// </summary>
        public DateTimeOffset IssueDate { get; set; }

        // NGƯỜI BÁN (Seller)

        /// <summary>
        /// MST người bán (nmmst)
        /// </summary>
        [MaxLength(20)]
        public string SellerTaxCode { get; set; }

        /// <summary>
        /// Tên người bán (nmten)
        /// </summary>
        [MaxLength(500)]
        public string SellerName { get; set; }

        /// <summary>
        /// Địa chỉ người bán (nmdchi)
        /// </summary>
        [MaxLength(1000)]
        public string SellerAddress { get; set; }

        // NGƯỜI MUA (Buyer)

        /// <summary>
        /// MST người mua (nbmst)
        /// </summary>
        [MaxLength(20)]
        public string BuyerTaxCode { get; set; }

        /// <summary>
        /// Tên người mua (nbten)
        /// </summary>
        [MaxLength(500)]
        public string BuyerName { get; set; }

        /// <summary>
        /// Địa chỉ người mua (nbdchi)
        /// </summary>
        [MaxLength(1000)]
        public string BuyerAddress { get; set; }

        /// <summary>
        /// Mã khách hàng (mkhang)
        /// </summary>
        [MaxLength(100)]
        public string CustomerCode { get; set; }

        // GIÁ TRỊ

        /// <summary>
        /// Tổng tiền hàng chưa thuế (tgtcthue)
        /// </summary>
        public decimal AmountBeforeTax { get; set; }

        /// <summary>
        /// Tổng tiền thuế (tgtthue)
        /// </summary>
        public decimal TaxAmount { get; set; }

        /// <summary>
        /// Tổng thanh toán (tgtttbso)
        /// </summary>
        public decimal TotalAmount { get; set; }

        /// <summary>
        /// Đơn vị tiền tệ (dvtte)
        /// </summary>
        [MaxLength(10)]
        public string Currency { get; set; }

        /// <summary>
        /// Hình thức thanh toán (htttoan)
        /// </summary>
        public int PaymentMethod { get; set; }

        /// <summary>
        /// Hình thức thanh toán - text (thtttoan)
        /// </summary>
        [MaxLength(200)]
        public string PaymentMethodText { get; set; }

        /// <summary>
        /// Tình trạng hóa đơn (tthai)
        /// </summary>
        public int Status { get; set; }

        /// <summary>
        /// Ghi chú (gchu)
        /// </summary>
        [MaxLength(1000)]
        public string Note { get; set; }

        /// <summary>
        /// Dữ liệu thô từ API (JSON)
        /// </summary>
        public string RawJsonData { get; set; }

        /// <summary>
        /// Thời gian đồng bộ từ API
        /// </summary>
        public DateTimeOffset SyncTime { get; set; }

        /// <summary>
        /// Chiều hóa đơn: 1 = Bán ra (Sold), 2 = Mua vào (Purchase)
        /// </summary>
        public int InvoiceDirection { get; set; } = 1;

        /// <summary>
        /// Kết quả kiểm tra hóa đơn (ttxly): 5=Đã cấp mã, 6=Cục Thuế đã nhận không mã, 8=Cục Thuế đã nhận HĐ có mã từ MTT
        /// Chỉ áp dụng cho hóa đơn mua vào (InvoiceDirection=2)
        /// </summary>
        public int InvoiceCheckResult { get; set; }
    }
}
