using MediatR;
using System.ComponentModel.DataAnnotations;
using TakeoutSaaS.Application.Identity.Contracts;

namespace TakeoutSaaS.Application.Identity.Commands;

/// <summary>
/// 更新用户命令。
/// </summary>
public sealed record UpdateIdentityUserCommand : IRequest<UserDetailDto?>
{
    /// <summary>
    /// 用户 ID。
    /// </summary>
    public long UserId { get; init; }

    /// <summary>
    /// 目标租户 ID（可选，默认当前登录租户；禁止跨租户操作）。
    /// </summary>
    public long? TenantId { get; init; }

    /// <summary>
    /// 展示名称。
    /// </summary>
    [Required]
    [StringLength(64)]
    public string DisplayName { get; init; } = string.Empty;

    /// <summary>
    /// 手机号。
    /// </summary>
    [StringLength(32)]
    public string? Phone { get; init; }

    /// <summary>
    /// 邮箱。
    /// </summary>
    [StringLength(128)]
    public string? Email { get; init; }

    /// <summary>
    /// 头像地址。
    /// </summary>
    [StringLength(512)]
    public string? Avatar { get; init; }

    /// <summary>
    /// 角色 ID 列表（字符串）。
    /// </summary>
    public string[]? RoleIds { get; init; }

    /// <summary>
    /// 并发控制版本（兼容字段，当前由数据库 xmin 托管）。
    /// </summary>
    public byte[]? RowVersion { get; init; }
}
