package net.jrtechs.www.model;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


/**
 * Class to store information on a player
 *
 * @author Jeffery Russell 5-26-18
 */
public class Player
{
    public static String KEY_STEAM_ID = "steamid";
    public static String KEY_REAL_NAME = "realname";
    public static String KEY_TIME_CREATED = "timecreated";
    public static String KEY_AVATAR = "avatarfull";
    public static String KEY_USERNAME = "personaname";

    public static String KEY_FRIENDS = "friends";


    /** Name of the player **/
    private String name;

    /** Steam id of the player **/
    private String id;

    /** List of friends the player has */
    private List<Player> friends;

    private String realName;

    private String avatar;

    private Integer timeCreated;

    private List<Game> playerGames;

    /**
     * Sets the name and id of the player
     *
     * @param name
     * @param id
     */
    public Player(String name, String id,
                  String realName, Integer timeCreated,
                  String avatar)
    {
        this.name = name;
        this.id = id;
        this.realName = realName;
        this.timeCreated = timeCreated;
        this.avatar = avatar;
        this.friends = new ArrayList<>();
        this.playerGames = new ArrayList<>();
    }


    public Player(Map<String, Object> apiInfo)
    {
        this.id = ((List<Object>) apiInfo.get(Player.KEY_STEAM_ID)).get(0).toString();
        this.name = ((List<Object>) apiInfo.get(Player.KEY_USERNAME)).get(0).toString();
        this.realName = ((List<Object>) apiInfo.getOrDefault(Player.KEY_REAL_NAME, "")).get(0).toString();
        this.avatar = ((List<Object>) apiInfo.getOrDefault(Player.KEY_AVATAR, "")).get(0).toString();
        this.timeCreated = (Integer)((List<Object>)apiInfo.get(KEY_TIME_CREATED)).get(0);
        this.friends = new ArrayList<>();
        this.playerGames = new ArrayList<>();
    }

    public List<Player> getFriends()
    {
        return friends;
    }

    public List<Game> getGames()
    {
        return this.playerGames;
    }


    /**
     * Getter for display name of player
     *
     * @return
     */
    public String getName()
    {
        return this.name.replace("'", "");
    }


    /**
     * Getter for id of player
     *
     * @return
     */
    public String getId()
    {
        return this.id;
    }

    public void setFriends(List<Player> friends)
    {
        this.friends = friends;
    }

    public String getRealName()
    {
        return this.realName;
    }


    public String getAvatar()
    {
        return this.avatar;
    }


    public Integer getTimeCreated()
    {
        return this.timeCreated;
    }


    @Override
    public String toString()
    {
        return "Name: " + this.name +
                " id: " + this.id +
                " friend count " + friends.size() +
                " avatar:" + this.avatar +
                " real name " + this.realName +
                " created " + this.timeCreated;
    }
}