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

namespace TakeoutSaaS.Application.App.Tenants.Commands;

/// <summary>
/// 注册租户命令。
/// </summary>
public sealed record RegisterTenantCommand : IRequest<TenantDto>
{
    /// <summary>
    /// 唯一租户编码。
    /// </summary>
    [Required]
    [StringLength(64)]
    public string Code { get; init; } = string.Empty;

    /// <summary>
    /// 租户名称。
    /// </summary>
    [Required]
    [StringLength(128)]
    public string Name { get; init; } = string.Empty;

    /// <summary>
    /// 租户简称。
    /// </summary>
    public string? ShortName { get; init; }

    /// <summary>
    /// 行业类型。
    /// </summary>
    public string? Industry { get; init; }

    /// <summary>
    /// 联系人姓名。
    /// </summary>
    public string? ContactName { get; init; }

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

    /// <summary>
    /// 联系人邮箱。
    /// </summary>
    public string? ContactEmail { get; init; }

    /// <summary>
    /// 购买套餐 ID。
    /// </summary>
    [Required]
    public long TenantPackageId { get; init; }

    /// <summary>
    /// 订阅时长（月），默认 12 个月。
    /// </summary>
    public int DurationMonths { get; init; } = 12;

    /// <summary>
    /// 是否自动续费。
    /// </summary>
    public bool AutoRenew { get; init; } = true;

    /// <summary>
    /// 生效时间（UTC），为空则立即生效。
    /// </summary>
    public DateTime? EffectiveFrom { get; init; }
}
