namespace TakeoutSaaS.Application.App.Finance.Invoice.Dto;

/// <summary>
/// 发票记录详情 DTO。
/// </summary>
public sealed class FinanceInvoiceRecordDetailDto
{
    /// <summary>
    /// 记录 ID。
    /// </summary>
    public long RecordId { get; set; }

    /// <summary>
    /// 发票号码。
    /// </summary>
    public string InvoiceNo { get; set; } = string.Empty;

    /// <summary>
    /// 申请人。
    /// </summary>
    public string ApplicantName { get; set; } = string.Empty;

    /// <summary>
    /// 开票抬头（公司名）。
    /// </summary>
    public string CompanyName { get; set; } = string.Empty;

    /// <summary>
    /// 纳税人识别号。
    /// </summary>
    public string? TaxpayerNumber { get; set; }

    /// <summary>
    /// 发票类型编码。
    /// </summary>
    public string InvoiceType { get; set; } = string.Empty;

    /// <summary>
    /// 发票类型文案。
    /// </summary>
    public string InvoiceTypeText { get; set; } = string.Empty;

    /// <summary>
    /// 金额。
    /// </summary>
    public decimal Amount { get; set; }

    /// <summary>
    /// 关联订单号。
    /// </summary>
    public string OrderNo { get; set; } = string.Empty;

    /// <summary>
    /// 接收邮箱。
    /// </summary>
    public string? ContactEmail { get; set; }

    /// <summary>
    /// 联系电话。
    /// </summary>
    public string? ContactPhone { get; set; }

    /// <summary>
    /// 申请备注。
    /// </summary>
    public string? ApplyRemark { get; set; }

    /// <summary>
    /// 状态编码。
    /// </summary>
    public string Status { get; set; } = string.Empty;

    /// <summary>
    /// 状态文案。
    /// </summary>
    public string StatusText { get; set; } = string.Empty;

    /// <summary>
    /// 申请时间（UTC）。
    /// </summary>
    public DateTime AppliedAt { get; set; }

    /// <summary>
    /// 开票时间（UTC）。
    /// </summary>
    public DateTime? IssuedAt { get; set; }

    /// <summary>
    /// 开票人 ID。
    /// </summary>
    public long? IssuedByUserId { get; set; }

    /// <summary>
    /// 开票备注。
    /// </summary>
    public string? IssueRemark { get; set; }

    /// <summary>
    /// 作废时间（UTC）。
    /// </summary>
    public DateTime? VoidedAt { get; set; }

    /// <summary>
    /// 作废人 ID。
    /// </summary>
    public long? VoidedByUserId { get; set; }

    /// <summary>
    /// 作废原因。
    /// </summary>
    public string? VoidReason { get; set; }
}
