using MediatR;

namespace MembershipService.API.Application.Queries;

/// <summary>
/// EN: Query to get member by ID.
/// VI: Query để lấy member theo ID.
/// </summary>
public class GetMemberByIdQuery : IRequest<MemberDto?>
{
    public Guid MemberId { get; set; }

    public GetMemberByIdQuery(Guid memberId)
    {
        MemberId = memberId;
    }
}

/// <summary>
/// EN: Member DTO.
/// VI: DTO member.
/// </summary>
/// <remarks>
/// EN: Profile fields (avatar, phone, DOB, address) are managed by IAM Service's UserProfile.
/// VI: Các trường profile (avatar, phone, DOB, address) được quản lý bởi UserProfile của IAM Service.
/// </remarks>
public class MemberDto
{
    public Guid Id { get; set; }
    public Guid UserId { get; set; }
    public string? Gender { get; set; }
    public string CountryCode { get; set; } = null!;
    public string? Preferences { get; set; }
    
    /// <summary>
    /// EN: Current member level (1, 2, 3...).
    /// VI: Level hiện tại của member (1, 2, 3...).
    /// </summary>
    public int CurrentLevel { get; set; }
    
    /// <summary>
    /// EN: Current experience points.
    /// VI: Điểm kinh nghiệm hiện tại.
    /// </summary>
    public int CurrentExp { get; set; }
    
    /// <summary>
    /// EN: Total experience points ever earned.
    /// VI: Tổng điểm kinh nghiệm đã kiếm được.
    /// </summary>
    public int TotalExpEarned { get; set; }
    
    public DateTime CreatedAt { get; set; }
    public DateTime UpdatedAt { get; set; }
}
