<?php

namespace ManiaControl\Players;

use ManiaControl\Formatter;

/**
 * Player Model Class
 *
 * @author kremsy & steeffeen
 */
class Player {
	/**
	 * Public properties
	 */
	public $index = -1;
	public $pid = -1;
	public $login = '';
	public $nickname = '';
	public $path = '';
	public $authLevel = 0;
	public $language = '';
	public $avatar = '';
	public $allies = array();
	public $clubLink = '';
	public $teamId = -1;
	public $isSpectator = false;
	public $isOfficial = false;
	public $isReferee = false;
	public $ladderScore = -1.;
	public $ladderRank = -1;
	public $joinTime = -1;
	public $ipAddress = '';
	public $maniaPlanetPlayDays = 0;

	/**
	 * Construct a player from XmlRpc data
	 *
	 * @param array $rpcInfos
	 */
	public function __construct(array $rpcInfos) {
		if(!$rpcInfos) {
			return;
		}

		$this->pid         = $rpcInfos['PlayerId'];
		$this->login       = $rpcInfos['Login'];
		$this->nickname    = Formatter::stripDirtyCodes($rpcInfos['NickName']);
		$this->path        = $rpcInfos['Path'];
		$this->language    = $rpcInfos['Language'];
		$this->avatar      = $rpcInfos['Avatar']['FileName'];
		$this->allies      = $rpcInfos['Allies'];
		$this->clubLink    = $rpcInfos['ClubLink'];
		$this->teamId      = $rpcInfos['TeamId'];
		$this->isSpectator = $rpcInfos['IsSpectator'];
		$this->isOfficial  = $rpcInfos['IsInOfficialMode'];
		$this->isReferee   = $rpcInfos['IsReferee'];
		$this->ladderScore = $rpcInfos['LadderStats']['PlayerRankings'][0]['Score'];
		$this->ladderRank  = $rpcInfos['LadderStats']['PlayerRankings'][0]['Ranking'];
		$this->maniaPlanetPlayDays = $rpcInfos['HoursSinceZoneInscription'] / 24;

		$this->ipAddress = $rpcInfos['IPAddress'];

		$this->joinTime = time();

		if($this->nickname == '') {
			$this->nickname = $this->login;
		}
	}


	/**
	 * Check if player is not a real player
	 *
	 * @return bool
	 */
	public function isFakePlayer() {
		return ($this->pid <= 0 || $this->path == "");
	}

	/**
	 * Get province
	 *
	 * @return string
	 */
	public function getProvince() {
		$pathParts = explode('|', $this->path);
		if(isset($pathParts[3])) {
			return $pathParts[3];
		}
		return $this->getCountry();
	}

	/**
	 * Get country
	 *
	 * @return string
	 */
	public function getCountry() {
		$pathParts = explode('|', $this->path);
		if(isset($pathParts[2])) {
			return $pathParts[2];
		}
		if(isset($pathParts[1])) {
			return $pathParts[1];
		}
		if(isset($pathParts[0])) {
			return $pathParts[0];
		}
		return $this->path;
	}

	/**
	 * Get continent
	 *
	 * @return string
	 */
	public function getContinent() {
		$pathParts = explode('|', $this->path);
		if(isset($pathParts[1])) {
			return $pathParts[1];
		}
		if(isset($pathParts[0])) {
			return $pathParts[0];
		}
		return $this->path;
	}
}