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

namespace Lada.Framework.Data.Domains.Finance
{
    /// <summary>
    /// Lịch sử đồng bộ hóa đơn VAT
    /// </summary>
    [Table("VatInvoiceSyncHistories")]
    public class VatInvoiceSyncHistory : BaseEntity
    {
        [Key]
        public int Id { get; set; }

        /// <summary>
        /// Thời gian bắt đầu đồng bộ
        /// </summary>
        public DateTimeOffset SyncStartTime { get; set; }

        /// <summary>
        /// Thời gian kết thúc đồng bộ
        /// </summary>
        public DateTimeOffset? SyncEndTime { get; set; }

        /// <summary>
        /// Ngày bắt đầu của khoảng thời gian cần đồng bộ
        /// </summary>
        public DateTimeOffset FromDate { get; set; }

        /// <summary>
        /// Ngày kết thúc của khoảng thời gian cần đồng bộ
        /// </summary>
        public DateTimeOffset ToDate { get; set; }

        /// <summary>
        /// Tổng số hóa đơn được insert
        /// </summary>
        public int InsertedCount { get; set; }

        /// <summary>
        /// Tổng số hóa đơn được update
        /// </summary>
        public int UpdatedCount { get; set; }

        /// <summary>
        /// Trạng thái đồng bộ: Success, Failed, InProgress
        /// </summary>
        [MaxLength(20)]
        public string Status { get; set; }

        /// <summary>
        /// Thông báo lỗi nếu có
        /// </summary>
        [MaxLength(2000)]
        public string ErrorMessage { get; set; }

        /// <summary>
        /// Loại đồng bộ: Auto (Hangfire) hoặc Manual (User trigger)
        /// </summary>
        [MaxLength(20)]
        public string SyncType { 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>
        /// Loại đồng bộ: Manual hoặc Auto
        /// </summary>
        public int? UserId { get; set; }

        /// <summary>
        /// Thời gian thực hiện (seconds)
        /// </summary>
        public double DurationSeconds { get; set; }
    }
}
