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

namespace Lada.Framework.Data.Domains.Finance
{
    /// <summary>
    /// Thông tin import sao kê ngân hàng
    /// </summary>
    public class BankStatementImport : BaseEntityWithKey<Guid>
    {
        /// <summary>
        /// ID tài khoản ngân hàng
        /// </summary>
        public int BankAccountId { get; set; }

        /// <summary>
        /// Tên file gốc
        /// </summary>
        [MaxLength(512)]
        public string OriginalFileName { get; set; } = string.Empty;

        /// <summary>
        /// Đường dẫn file đã lưu
        /// </summary>
        [MaxLength(1024)]
        public string FilePath { get; set; } = string.Empty;

        /// <summary>
        /// Kích thước file (bytes)
        /// </summary>
        public long FileSize { get; set; }

        /// <summary>
        /// Tổng số dòng trong file
        /// </summary>
        public int TotalRows { get; set; }

        /// <summary>
        /// Số dòng xử lý thành công
        /// </summary>
        public int ProcessedRows { get; set; }

        /// <summary>
        /// Số dòng lỗi
        /// </summary>
        public int ErrorRows { get; set; }

        /// <summary>
        /// Số dòng bỏ qua
        /// </summary>
        public int SkippedRows { get; set; }

        /// <summary>
        /// Số dòng trùng lặp
        /// </summary>
        public int DuplicateRows { get; set; }

        /// <summary>
        /// Trạng thái import
        /// </summary>
        public ImportStatus ImportStatus { get; set; } = ImportStatus.Processing;

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

        /// <summary>
        /// Chi tiết lỗi (JSON format)
        /// </summary>
        public string ErrorDetails { get; set; } = string.Empty;

        /// <summary>
        /// Mã ngân hàng được import
        /// </summary>
        [MaxLength(128)]
        public string BankCode { get; set; } = string.Empty;

        /// <summary>
        /// Ngày bắt đầu của dữ liệu import
        /// </summary>
        public DateTimeOffset? DataFromDate { get; set; }

        /// <summary>
        /// Ngày kết thúc của dữ liệu import
        /// </summary>
        public DateTimeOffset? DataToDate { get; set; }

        /// <summary>
        /// Có ghi đè dữ liệu trùng lặp không
        /// </summary>
        public bool OverwriteExisting { get; set; } = false;

        /// <summary>
        /// Thời gian bắt đầu xử lý
        /// </summary>
        public DateTimeOffset? ProcessStartTime { get; set; }

        /// <summary>
        /// Thời gian kết thúc xử lý
        /// </summary>
        public DateTimeOffset? ProcessEndTime { get; set; }

        /// <summary>
        /// Người thực hiện import
        /// </summary>
        public int ImportedByUserId { get; set; }

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

        #region Navigation Properties

        /// <summary>
        /// Tài khoản ngân hàng
        /// </summary>
        public virtual BankAccount BankAccount { get; set; } = null!;

        /// <summary>
        /// Người thực hiện import
        /// </summary>
        public virtual User ImportedByUser { get; set; } = null!;

        /// <summary>
        /// Danh sách giao dịch được import
        /// </summary>
        public virtual ICollection<BankTransaction> BankTransactions { get; set; } = new List<BankTransaction>();

        #endregion
    }
}
