using MediatR;

namespace MembershipService.API.Application.Queries;

/// <summary>
/// EN: Query to get member level progress.
/// VI: Query để lấy tiến độ level của member.
/// </summary>
public class GetMemberProgressQuery : IRequest<MemberProgressDto?>
{
    public Guid MemberId { get; set; }

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

/// <summary>
/// EN: Member progress DTO.
/// VI: DTO tiến độ member.
/// </summary>
public class MemberProgressDto
{
    /// <summary>
    /// EN: Member ID.
    /// VI: ID của member.
    /// </summary>
    public Guid MemberId { get; set; }

    /// <summary>
    /// EN: Current level number.
    /// VI: Số level hiện tại.
    /// </summary>
    public int CurrentLevel { get; set; }

    /// <summary>
    /// EN: Current level name.
    /// VI: Tên level hiện tại.
    /// </summary>
    public string CurrentLevelName { get; set; } = null!;

    /// <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; }

    /// <summary>
    /// EN: EXP required for next level.
    /// VI: EXP cần để lên level tiếp.
    /// </summary>
    public int ExpToNextLevel { get; set; }

    /// <summary>
    /// EN: Progress percentage to next level (0-100).
    /// VI: Phần trăm tiến độ đến level tiếp (0-100).
    /// </summary>
    public int ProgressPercent { get; set; }

    /// <summary>
    /// EN: Next level number (null if max level).
    /// VI: Số level tiếp theo (null nếu đã max).
    /// </summary>
    public int? NextLevel { get; set; }

    /// <summary>
    /// EN: Next level name (null if max level).
    /// VI: Tên level tiếp theo (null nếu đã max).
    /// </summary>
    public string? NextLevelName { get; set; }

    /// <summary>
    /// EN: Badge color for current level.
    /// VI: Màu badge của level hiện tại.
    /// </summary>
    public string? BadgeColor { get; set; }
}
