using MediatR;
using System.ComponentModel.DataAnnotations;
using TakeoutSaaS.Application.App.Tenants.Dto;

namespace TakeoutSaaS.Application.App.Tenants.Commands;

/// <summary>
/// 套餐升降配命令。
/// </summary>
public sealed record ChangeTenantSubscriptionPlanCommand : IRequest<TenantSubscriptionDto>
{
    /// <summary>
    /// 租户 ID（雪花算法）。
    /// </summary>
    [Required]
    public long TenantId { get; init; }

    /// <summary>
    /// 现有订阅 ID。
    /// </summary>
    [Required]
    public long TenantSubscriptionId { get; init; }

    /// <summary>
    /// 目标套餐 ID。
    /// </summary>
    [Required]
    public long TargetPackageId { get; init; }

    /// <summary>
    /// 是否立即生效，否则在下一结算周期生效。
    /// </summary>
    public bool Immediate { get; init; }

    /// <summary>
    /// 调整备注。
    /// </summary>
    public string? Notes { get; init; }
}
