<?php

namespace Battles;

use Battles\Database\Db;

/**
 * Разные способы отображения строки с логином персонажа.
 */
const INVIS = '<i>невидимка</i>';
class Nick extends UserStats
{
    private function isInvisible()
    {
        return Db::getInstance()->execute('SELECT count(*) FROM users_effects WHERE type = 1022 AND owner_id = ?', $this->id)->fetchColumn();
    }

    /**
     * Отображение иконки склонности.
     * @return string
     */
    private function getAlignImage(): ?string
    {
        return $this->align ? "<img src='i/align_$this->align.gif' alt='Склонность'>" : null;
    }

    /**
     * Отображение иконки клана.
     * @return string
     */
    private function getClanImage(): ?string
    {
        return $this->clan ? "<img src='i/clan/$this->clan.png' alt='Клан'>" : null;
    }

    private function getInfolinkImage(): string
    {
        return "<a href='inf.php?$this->login' target='_blank'><img src='i/inf.gif' alt='Ссылка на профиль'></a>";
    }

    /**
     * Вызов класса из самого себя. Читать про обратное связывание и пытаться что-то понять.
     * @param $playerId
     *
     * @return Nick
     */
    public static function id($playerId): self
    {
        return new self($playerId);
    }

    /**
     * Возвращает строку со склонностью, кланом, логином, уровнем, ссылкой на профиль.
     *
     * @param int $showInvisibility отображать логин даже если персонаж невидимка.
     *
     * @return string
     */
    public function full(int $showInvisibility = 0): string
    {
        return !$showInvisibility && $this->isInvisible() ? INVIS : $this->getAlignImage() . $this->getClanImage() . " <b>$this->login</b> [$this->level] " . $this->getInfolinkImage();
    }

    /**
     * Возвращает строку с логином.
     * Избавиться от этого! Оставлено для совместимости.
     * @return string
     */
    public function short(): string
    {
        return $this->login;
    }

    /**
     * Возвращает строку со склонностью, кланом, логином, уровнем, ссылкой на профиль, здоровьем.
     * @return string
     */
    public function battle(): string
    {
        return $this->full() . "<img src='i/herz.gif' alt='HP'> [$this->health/$this->maxHealth]";
    }
}