namespace IamService.API.Application.Common;

/// <summary>
/// EN: User data transfer object for API responses.
/// VI: Data transfer object của user cho API responses.
/// </summary>
public record UserDto
{
    /// <summary>
    /// EN: User's unique identifier.
    /// VI: Mã định danh duy nhất của user.
    /// </summary>
    /// <example>550e8400-e29b-41d4-a716-446655440000</example>
    public Guid Id { get; init; }

    /// <summary>
    /// EN: User's email address.
    /// VI: Địa chỉ email của user.
    /// </summary>
    /// <example>user@example.com</example>
    public string Email { get; init; } = string.Empty;

    /// <summary>
    /// EN: User's first name.
    /// VI: Tên của user.
    /// </summary>
    /// <example>John</example>
    public string FirstName { get; init; } = string.Empty;

    /// <summary>
    /// EN: User's last name.
    /// VI: Họ của user.
    /// </summary>
    /// <example>Doe</example>
    public string LastName { get; init; } = string.Empty;

    /// <summary>
    /// EN: User's full name.
    /// VI: Họ tên đầy đủ của user.
    /// </summary>
    /// <example>John Doe</example>
    public string FullName { get; init; } = string.Empty;

    /// <summary>
    /// EN: User's roles.
    /// VI: Các role của user.
    /// </summary>
    /// <example>["admin", "user"]</example>
    public IEnumerable<string> Roles { get; init; } = [];

    /// <summary>
    /// EN: User account status.
    /// VI: Trạng thái tài khoản user.
    /// </summary>
    /// <example>Active</example>
    public string Status { get; init; } = string.Empty;

    /// <summary>
    /// EN: When the user was created.
    /// VI: Thời điểm user được tạo.
    /// </summary>
    /// <example>2026-01-12T06:30:00Z</example>
    public DateTime CreatedAt { get; init; }

    /// <summary>
    /// EN: When the user last logged in.
    /// VI: Thời điểm user đăng nhập lần cuối.
    /// </summary>
    /// <example>2026-01-12T12:00:00Z</example>
    public DateTime? LastLoginAt { get; init; }
}

/// <summary>
/// EN: Current user info response.
/// VI: Response thông tin user hiện tại.
/// </summary>
public record CurrentUserDto
{
    /// <summary>
    /// EN: User's unique identifier.
    /// VI: Mã định danh duy nhất của user.
    /// </summary>
    /// <example>550e8400-e29b-41d4-a716-446655440000</example>
    public string Id { get; init; } = string.Empty;

    /// <summary>
    /// EN: User's email address.
    /// VI: Địa chỉ email của user.
    /// </summary>
    /// <example>user@example.com</example>
    public string? Email { get; init; }

    /// <summary>
    /// EN: User's display name.
    /// VI: Tên hiển thị của user.
    /// </summary>
    /// <example>John Doe</example>
    public string? Name { get; init; }

    /// <summary>
    /// EN: User's roles.
    /// VI: Các role của user.
    /// </summary>
    /// <example>["admin", "user"]</example>
    public IEnumerable<string> Roles { get; init; } = [];
}
