using System.Text.Json.Serialization;
using TakeoutSaaS.Domain.Stores.Enums;
using TakeoutSaaS.Shared.Abstractions.Serialization;

namespace TakeoutSaaS.Application.App.StoreAudits.Dto;

/// <summary>
/// 待审核门店 DTO。
/// </summary>
public sealed record PendingStoreAuditDto
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long StoreId { get; init; }

    /// <summary>
    /// 门店名称。
    /// </summary>
    public string StoreName { get; init; } = string.Empty;

    /// <summary>
    /// 门店编码。
    /// </summary>
    public string StoreCode { get; init; } = string.Empty;

    /// <summary>
    /// 租户 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long TenantId { get; init; }

    /// <summary>
    /// 租户名称。
    /// </summary>
    public string TenantName { get; init; } = string.Empty;

    /// <summary>
    /// 商户 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long MerchantId { get; init; }

    /// <summary>
    /// 商户名称。
    /// </summary>
    public string MerchantName { get; init; } = string.Empty;

    /// <summary>
    /// 门头招牌图。
    /// </summary>
    public string? SignboardImageUrl { get; init; }

    /// <summary>
    /// 完整地址。
    /// </summary>
    public string FullAddress { get; init; } = string.Empty;

    /// <summary>
    /// 主体类型。
    /// </summary>
    public StoreOwnershipType OwnershipType { get; init; }

    /// <summary>
    /// 提交时间。
    /// </summary>
    public DateTime? SubmittedAt { get; init; }

    /// <summary>
    /// 等待天数。
    /// </summary>
    public int WaitingDays { get; init; }

    /// <summary>
    /// 是否超时。
    /// </summary>
    public bool IsOverdue { get; init; }

    /// <summary>
    /// 资质数量。
    /// </summary>
    public int QualificationCount { get; init; }
}
