package com.faforever.client.chat;
import com.faforever.client.game.GameStatus;
import com.faforever.client.remote.domain.GameState;
import com.faforever.client.remote.domain.Player;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.FloatProperty;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SetProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleFloatProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleSetProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableSet;
import static com.faforever.client.chat.SocialStatus.OTHER;
/**
* Represents a player with username, clan, country, friend/foe flag and so on. Can also be a chat-only user. This
* represents the combination of a PlayersInfo (from the FAF server) and a ChatUser (from IRC).
*/
// TODO rename to Player
public class PlayerInfoBean {
private final IntegerProperty id;
private final StringProperty username;
private final StringProperty clan;
private final StringProperty country;
private final StringProperty avatarUrl;
private final StringProperty avatarTooltip;
private final ObjectProperty<SocialStatus> socialStatus;
private final SetProperty<String> moderatorForChannels;
private final BooleanProperty chatOnly;
private final FloatProperty globalRatingDeviation;
private final FloatProperty globalRatingMean;
private final FloatProperty leaderboardRatingDeviation;
private final FloatProperty leaderboardRatingMean;
private final IntegerProperty gameUid;
private final SimpleObjectProperty<GameStatus> gameStatus;
private final IntegerProperty numberOfGames;
public PlayerInfoBean(Player player) {
this();
username.set(player.getLogin());
clan.set(player.getClan());
country.set(player.getCountry());
if (player.getAvatar() != null) {
avatarTooltip.set(player.getAvatar().getTooltip());
avatarUrl.set(player.getAvatar().getUrl());
}
}
private PlayerInfoBean() {
id = new SimpleIntegerProperty();
username = new SimpleStringProperty();
clan = new SimpleStringProperty();
country = new SimpleStringProperty();
avatarUrl = new SimpleStringProperty();
avatarTooltip = new SimpleStringProperty();
moderatorForChannels = new SimpleSetProperty<>(FXCollections.observableSet());
chatOnly = new SimpleBooleanProperty(true);
globalRatingDeviation = new SimpleFloatProperty();
globalRatingMean = new SimpleFloatProperty();
leaderboardRatingDeviation = new SimpleFloatProperty();
leaderboardRatingMean = new SimpleFloatProperty();
gameStatus = new SimpleObjectProperty<>();
gameUid = new SimpleIntegerProperty();
numberOfGames = new SimpleIntegerProperty();
socialStatus = new SimpleObjectProperty<>(OTHER);
}
public PlayerInfoBean(String username) {
this();
this.gameStatus.set(GameStatus.NONE);
this.username.set(username);
}
public SocialStatus getSocialStatus() {
return socialStatus.get();
}
public void setSocialStatus(SocialStatus socialStatus) {
this.socialStatus.set(socialStatus);
}
public ObjectProperty<SocialStatus> socialStatusProperty() {
return socialStatus;
}
public int getId() {
return id.get();
}
public void setId(int id) {
this.id.set(id);
}
public IntegerProperty idProperty() {
return id;
}
public int getNumberOfGames() {
return numberOfGames.get();
}
public void setNumberOfGames(int numberOfGames) {
this.numberOfGames.set(numberOfGames);
}
public IntegerProperty numberOfGamesProperty() {
return numberOfGames;
}
@Override
public int hashCode() {
return username.hashCode();
}
@Override
public boolean equals(Object obj) {
return obj != null
&& (obj.getClass() == PlayerInfoBean.class)
&& getUsername().equalsIgnoreCase(((PlayerInfoBean) obj).getUsername());
}
public String getUsername() {
return username.get();
}
public void setUsername(String username) {
this.username.set(username);
}
public StringProperty usernameProperty() {
return username;
}
public String getClan() {
return clan.get();
}
public void setClan(String clan) {
this.clan.set(clan);
}
public StringProperty clanProperty() {
return clan;
}
public String getCountry() {
return country.get();
}
public void setCountry(String country) {
this.country.set(country);
}
public StringProperty countryProperty() {
return country;
}
public String getAvatarUrl() {
return avatarUrl.get();
}
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl.set(avatarUrl);
}
public StringProperty avatarUrlProperty() {
return avatarUrl;
}
public String getAvatarTooltip() {
return avatarTooltip.get();
}
public void setAvatarTooltip(String avatarTooltip) {
this.avatarTooltip.set(avatarTooltip);
}
public StringProperty avatarTooltipProperty() {
return avatarTooltip;
}
public boolean isChatOnly() {
return chatOnly.get();
}
public BooleanProperty chatOnlyProperty() {
return chatOnly;
}
public ObservableSet<String> getModeratorForChannels() {
return moderatorForChannels.get();
}
public SetProperty<String> moderatorForChannelsProperty() {
return moderatorForChannels;
}
public boolean getChatOnly() {
return chatOnly.get();
}
public void setChatOnly(boolean chatOnly) {
this.chatOnly.set(chatOnly);
}
public float getGlobalRatingDeviation() {
return globalRatingDeviation.get();
}
public void setGlobalRatingDeviation(float globalRatingDeviation) {
this.globalRatingDeviation.set(globalRatingDeviation);
}
public FloatProperty globalRatingDeviationProperty() {
return globalRatingDeviation;
}
public float getGlobalRatingMean() {
return globalRatingMean.get();
}
public void setGlobalRatingMean(float globalRatingMean) {
this.globalRatingMean.set(globalRatingMean);
}
public FloatProperty globalRatingMeanProperty() {
return globalRatingMean;
}
public GameStatus getGameStatus() {
return gameStatus.get();
}
public void setGameStatus(GameStatus gameStatus) {
this.gameStatus.set(gameStatus);
}
public SimpleObjectProperty<GameStatus> gameStatusProperty() {
return gameStatus;
}
public void setGameStatusFromGameState(GameState gameState) {
gameStatus.set(GameStatus.fromGameState(gameState));
}
public int getGameUid() {
return gameUid.get();
}
public void setGameUid(int gameUid) {
this.gameUid.set(gameUid);
}
public IntegerProperty gameUidProperty() {
return gameUid;
}
public float getLeaderboardRatingMean() {
return leaderboardRatingMean.get();
}
public void setLeaderboardRatingMean(float leaderboardRatingMean) {
this.leaderboardRatingMean.set(leaderboardRatingMean);
}
public FloatProperty leaderboardRatingMeanProperty() {
return leaderboardRatingMean;
}
public float getLeaderboardRatingDeviation() {
return leaderboardRatingDeviation.get();
}
public void setLeaderboardRatingDeviation(float leaderboardRatingDeviation) {
this.leaderboardRatingDeviation.set(leaderboardRatingDeviation);
}
public FloatProperty leaderboardRatingDeviationProperty() {
return leaderboardRatingDeviation;
}
public void updateFromPlayerInfo(Player player) {
setId(player.getId());
setChatOnly(false);
setClan(player.getClan());
setCountry(player.getCountry());
if (player.getGlobalRating() != null) {
setGlobalRatingMean(player.getGlobalRating()[0]);
setGlobalRatingDeviation(player.getGlobalRating()[1]);
}
if (player.getLadderRating() != null) {
setLeaderboardRatingMean(player.getLadderRating()[0]);
setLeaderboardRatingDeviation(player.getLadderRating()[1]);
}
setNumberOfGames(player.getNumberOfGames());
if (player.getAvatar() != null) {
setAvatarUrl(player.getAvatar().getUrl());
setAvatarTooltip(player.getAvatar().getTooltip());
}
}
}