/**
 * @copyright NHCarrigan
 * @license Naomi's Public License
 * @author Naomi Carrigan
 */

interface LeaderboardUser {
  id:           string;
  username:     string;
  slug:         string | null;
  avatar:       string | null;
  primaryBadge: string | null;
  isVip:        boolean;
  isMod:        boolean;
  isStaff:      boolean;
  createdAt:    Date;
}

interface SuggestionsLeaderboard extends LeaderboardUser {
  totalSuggestions:    number;
  acceptedSuggestions: number;
  acceptanceRate:      number;
}

interface LikesLeaderboard extends LeaderboardUser {
  totalLikes: number;
}

interface CommentsLeaderboard extends LeaderboardUser {
  totalComments: number;
}

interface OverallLeaderboard extends LeaderboardUser {
  totalSuggestions:  number;
  totalLikes:        number;
  totalComments:     number;
  achievementCount:  number;
  achievementPoints: number;
  currentStreak:     number;
  diversityScore:    number;
}

interface LeaderboardResponse {
  topSuggestions: Array<SuggestionsLeaderboard>;
  topLikes:       Array<LikesLeaderboard>;
  topComments:    Array<CommentsLeaderboard>;
  topOverall:     Array<OverallLeaderboard>;
}

export {
  type LeaderboardUser,
  type SuggestionsLeaderboard,
  type LikesLeaderboard,
  type CommentsLeaderboard,
  type OverallLeaderboard,
  type LeaderboardResponse,
};
