using TakeoutSaaS.Domain.Reservations.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;

namespace TakeoutSaaS.Domain.Reservations.Entities;

/// <summary>
/// 预约/预订记录。
/// </summary>
public sealed class Reservation : MultiTenantEntityBase
{
    /// <summary>
    /// 门店。
    /// </summary>
    public long StoreId { get; set; }

    /// <summary>
    /// 预约号。
    /// </summary>
    public string ReservationNo { get; set; } = string.Empty;

    /// <summary>
    /// 客户姓名。
    /// </summary>
    public string CustomerName { get; set; } = string.Empty;

    /// <summary>
    /// 联系电话。
    /// </summary>
    public string CustomerPhone { get; set; } = string.Empty;

    /// <summary>
    /// 用餐人数。
    /// </summary>
    public int PeopleCount { get; set; }

    /// <summary>
    /// 预约时间（UTC）。
    /// </summary>
    public DateTime ReservationTime { get; set; }

    /// <summary>
    /// 状态。
    /// </summary>
    public ReservationStatus Status { get; set; } = ReservationStatus.Pending;

    /// <summary>
    /// 桌型/标签。
    /// </summary>
    public string? TablePreference { get; set; }

    /// <summary>
    /// 备注。
    /// </summary>
    public string? Remark { get; set; }

    /// <summary>
    /// 核销码/到店码。
    /// </summary>
    public string? CheckInCode { get; set; }

    /// <summary>
    /// 实际签到时间。
    /// </summary>
    public DateTime? CheckedInAt { get; set; }

    /// <summary>
    /// 取消时间。
    /// </summary>
    public DateTime? CancelledAt { get; set; }
}
