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

namespace Lada.Framework.Data.Domains.Finance;

/// <summary>
/// Giao dịch thẻ xăng dầu (thẻ tín dụng).
/// Lưu ý: Khác với BankTransaction (có CreditAmount và DebitAmount),
/// FuelCardTransaction chỉ có Amount vì thẻ tín dụng chỉ dùng để chi tiêu.
/// </summary>
public class FuelCardTransaction : BaseEntityWithKey<Guid>
{
    /// <summary>
    /// ID thẻ xăng dầu
    /// </summary>
    public int FuelCardId { get; set; }

    /// <summary>
    /// Thời gian giao dịch
    /// </summary>
    public DateTimeOffset TransactionDate { get; set; }

    /// <summary>
    /// Số tiền (LUÔN DƯƠNG, vì là chi tiêu)
    /// </summary>
    public decimal Amount { get; set; }

    /// <summary>
    /// Số tiền gốc từ sao kê (có thể âm: -1,119,109)
    /// Dùng để đối chiếu với file Excel gốc
    /// </summary>
    public decimal RawAmount { get; set; }

    /// <summary>
    /// Loại tiền (VND, USD...)
    /// </summary>
    [MaxLength(10)]
    public string Currency { get; set; } = "VND";

    /// <summary>
    /// Loại giao dịch (Retail, Refund, Fee...)
    /// </summary>
    [MaxLength(50)]
    public string TransactionType { get; set; } = string.Empty;

    /// <summary>
    /// Địa điểm giao dịch (PLX_HAI PHONG_CH 30 - HAI PHONG - VNM)
    /// </summary>
    [MaxLength(512)]
    public string Location { get; set; } = string.Empty;

    /// <summary>
    /// Trạng thái giao dịch
    /// </summary>
    public FuelCardTransactionStatus Status { get; set; } = FuelCardTransactionStatus.Success;

    /// <summary>
    /// Dữ liệu thô từ Excel (JSON format, lưu toàn bộ dòng gốc)
    /// </summary>
    [MaxLength(4000)]
    public string RawData { get; set; } = string.Empty;

    /// <summary>
    /// ID import sao kê (nếu được import từ file)
    /// </summary>
    public Guid? ImportId { get; set; }

    /// <summary>
    /// Số dòng trong file import
    /// </summary>
    public int? ImportRowNumber { get; set; }

    /// <summary>
    /// ID lần đổ dầu (để đối soát)
    /// </summary>
    public int? FuelRefillId { get; set; }

    /// <summary>
    /// Đã đối soát với lần đổ dầu chưa
    /// </summary>
    public bool IsReconciled { get; set; } = false;

    /// <summary>
    /// Đã thanh toán cho ngân hàng chưa
    /// </summary>
    public bool IsPaidToBank { get; set; } = false;

    /// <summary>
    /// Ngày thanh toán cho ngân hàng
    /// </summary>
    public DateTimeOffset? PaidToBank { get; set; }

    /// <summary>
    /// Ghi chú xử lý
    /// </summary>
    [MaxLength(1024)]
    public string ProcessNote { get; set; } = string.Empty;

    #region Navigation Properties

    /// <summary>
    /// Thẻ xăng dầu
    /// </summary>
    public virtual FuelCard FuelCard { get; set; } = null!;

    /// <summary>
    /// Thông tin import (nếu có)
    /// </summary>
    public virtual FuelCardStatementImport? FuelCardStatementImport { get; set; }

    /// <summary>
    /// Liên kết đến lần đổ dầu (nếu đã đối soát)
    /// </summary>
    public virtual FuelRefill? FuelRefill { get; set; }

    #endregion
}
