<?php

/**
 * Разные способы отображения строки с логином персонажа.
 */

class Nick extends User
{
    private function getInvisibilityStatus()
    {
        return db::c()->query('SELECT 1 FROM users_effects WHERE type = 1022 AND owner_id = ?i', $this->id);
    }

    /**
     * Отображение иконки склонности.
     * @return string
     */
    private function getAlign()
    {
        if (isset($this->align)) {
            return sprintf('<img src="i/align_%s.gif">', $this->align);
        } else {
            return '';
        }
    }

    /**
     * Отображение иконки клана.
     * @return string
     */
    private function getClan()
    {
        if (isset($this->clan)) {
            return sprintf('<img src="i/clan/%s.png">', $this->clan);
        } else {
            return '';
        }
    }

    /**
     * Берем ID и возвращаем его. Что-то для обратной совместимости, скорее всего.
     * TODO: Отвязаться от функции и удалить.
     * @param $playerId
     *
     * @return Nick
     */
    public static function id($playerId)
    {
        return new self($playerId);
    }

    /**
     * Возвращает строку со склонностью, кланом, логином, уровнем, ссылкой на профиль.
     *
     * @param int $showInvisibility - По умолчанию 0. Выбрать 1, если надо отображать невидимый статус.
     *
     * @return string
     * @throws \Krugozor\Database\Mysql\Exception
     */
    public function full($showInvisibility = 0)
    {
        if ($showInvisibility && $this->getInvisibilityStatus()) {
            return '<i>невидимка</i>';
        }
        return $this->getAlign().$this->getClan().sprintf('<b>%s</b> [%s] <a href="inf.php?%s" target="_blank"><img src="i/inf.gif" style="width:12px;height:11px"></a>', $this->login, $this->level, $this->login);
    }

    /**
     * Возвращает строку с логином или невидимым статусом.
     * @return string
     * @throws \Krugozor\Database\Mysql\Exception
     */
    public function short()
    {
        if ($this->getInvisibilityStatus()) {
            return '<i>невидимка</i>';
        } else {
            return htmlspecialchars($this->login);
        }
    }

    /**
     * Возвращает строку со склонностью, кланом, логином, уровнем, ссылкой на профиль, здоровьем.
     * @return string
     */
    public function battle()
    {
        return $this->getAlign().$this->getClan().sprintf('<b>%s</b> [%s] <a href="inf.php?%s" target="_blank"><img src="i/inf.gif" style="width:12px;height:11px"></a> <img src="i/herz.gif" alt="HP"> _hp_/_maxhp_', $this->login, $this->level, $this->login);
    }

    /**
     * Возвращает строку с логином и здоровьем, выделяя строку определённым стилем.
     * @param $textstyle - Название стиля отображения логина персонажа (main.css) для цветового разделения команд.
     *
     * @return string
     */
    public function battleShort($textstyle)
    {
        if ($this->getInvisibilityStatus()) {
            return '<i>невидимка</i>';
    }
        else {
            return sprintf('<span style="%s">%s</span> [_hp_/_maxhp_]', $textstyle, $this->login);
        }
    }
}