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

namespace Lada.Framework.Data.Domains.Finance
{
    /// <summary>
    /// Lịch sử thao tác trên phiếu đối soát khách hàng (Audit Log)
    /// </summary>
    public class CustomerReconciliationLog : BaseEntityWithKey<int>
    {
        /// <summary>
        /// ID phiếu đối soát
        /// </summary>
        public int CustomerReconciliationSlipId { get; set; }
        public virtual CustomerReconciliationSlip CustomerReconciliationSlip { get; set; }

        /// <summary>
        /// Người thực hiện hành động
        /// </summary>
        public int ActorId { get; set; }

        /// <summary>
        /// Tên người thực hiện
        /// </summary>
        [MaxLength(128)]
        public string ActorUsername { get; set; } = string.Empty;

        /// <summary>
        /// Loại hành động
        /// </summary>
        public CustomerReconciliationActionType ActionType { get; set; }

        /// <summary>
        /// Trạng thái trước khi thay đổi
        /// </summary>
        [MaxLength(64)]
        public string OldStatus { get; set; } = string.Empty;

        /// <summary>
        /// Trạng thái sau khi thay đổi
        /// </summary>
        [MaxLength(64)]
        public string NewStatus { get; set; } = string.Empty;

        /// <summary>
        /// Ghi chú kèm theo hành động
        /// </summary>
        [MaxLength(2048)]
        public string Note { get; set; } = string.Empty;

        /// <summary>
        /// Metadata bổ sung (JSON)
        /// </summary>
        [MaxLength(4000)]
        public string Metadata { get; set; } = string.Empty;

        /// <summary>
        /// Thời điểm thao tác (sử dụng CreatedTime từ BaseEntity)
        /// </summary>
    }

    /// <summary>
    /// Loại hành động trên phiếu đối soát
    /// </summary>
    public enum CustomerReconciliationActionType
    {
        [Description("Tạo phiếu")]
        Create = 1,

        [Description("Cập nhật")]
        Update = 2,

        [Description("Gửi phê duyệt")]
        Submit = 3,

        [Description("Phê duyệt")]
        Approve = 4,

        [Description("Từ chối")]
        Reject = 5,

        [Description("Xác nhận thanh toán")]
        ConfirmPayment = 6,

        [Description("Hủy")]
        Cancel = 7
    }
}
