using System.ComponentModel.DataAnnotations;
using TakeoutSaaS.Domain.Stores.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;

namespace TakeoutSaaS.Domain.Stores.Entities;

/// <summary>
/// 门店自提配置。
/// </summary>
public sealed class StorePickupSetting : MultiTenantEntityBase
{
    /// <summary>
    /// 门店标识。
    /// </summary>
    public long StoreId { get; set; }

    /// <summary>
    /// 是否允许当天自提。
    /// </summary>
    public bool AllowToday { get; set; } = true;

    /// <summary>
    /// 可预约天数（含当天）。
    /// </summary>
    public int AllowDaysAhead { get; set; } = 3;

    /// <summary>
    /// 默认截单分钟（开始前多少分钟截止）。
    /// </summary>
    public int DefaultCutoffMinutes { get; set; } = 30;

    /// <summary>
    /// 单笔自提最大份数。
    /// </summary>
    public int? MaxQuantityPerOrder { get; set; }

    /// <summary>
    /// 自提配置模式。
    /// </summary>
    public StorePickupMode Mode { get; set; } = StorePickupMode.Big;

    /// <summary>
    /// 精细规则 JSON。
    /// </summary>
    public string? FineRuleJson { get; set; }

    /// <summary>
    /// 并发控制字段。
    /// </summary>
    [Timestamp]
    public byte[] RowVersion { get; set; } = Array.Empty<byte>();
}
