<?php


class User
{
    public $id;
    public $login;
    public $email;
    public $realname;
    public $borndate;
    public $info;
    public $level;
    public $align;
    public $clan;
    public $money;
    public $strength;
    public $dexterity;
    public $intuition;
    public $endurance;
    public $intelligence;
    public $wisdom;
    public $ip;
    public $session_id;
    public $admin;
    public $enter_game;
    public $room;
    public $block;

    // Пока несуществующие, для совместимости.
    public $married;
    public $stats;
    public $shadow;
    public $experience;
    public $stat_points;

    //Статусы того, кто смотрит на информацию.
    protected $watcherIsAdmin;
    protected $watcherIsModerator;

    use Rooms;

    public function __construct($user)
    {
        $user_query = db::c()->query('SELECT * FROM users WHERE id = "?s" OR login = "?s"', $user, $user)->fetch_assoc();
        $watchingUser_query = db::c()->query('SELECT `align`,`admin` FROM `users` WHERE `id` = ?i', $_SESSION['uid'])->fetch_assoc();
        foreach ($this as $key => $value) {
            if (isset($user_query[$key])) {
                $this->$key = $user_query[$key];
            }
        }
        if ($watchingUser_query['admin']) {
            $this->watcherIsAdmin = 1;
        }
        if ($watchingUser_query['align'] == 1) {
            $this->watcherIsModerator = 1;
        }
    }

    protected function showItem($item = 0)
    {
        $itemSlot = $item['dressed_slot'] ?? 0;
        $itemName = $item['name'] ?? '';
        $itemImage = $item['image'] ?? '';
        if ($itemSlot) {
            echo <<<SLOT
<img src="/i/sh/{$itemImage}" class="item-wrap-normal tip" alt="Слот [{$itemSlot}]">
<span class="tiptext"><strong>{$itemName}</strong></span>
SLOT;
        } else {
            echo <<<EMPTY_SLOT
<img src="/i/sh/noitem.png" class="item-wrap-normal" title="Пустой слот [{$item}]" alt="Пустой слот [{$item}]">
EMPTY_SLOT;
        }
    }

    public function showUserInfo()
    {
        $dressed_items = db::c()->query('SELECT * FROM inventory WHERE owner_id = ?i AND dressed_slot > 0', $this->id);
        while ($row = $dressed_items->fetch_assoc()) {
            $dressed_item[$row['dressed_slot']] = $row;
        }

        echo '<div class="user-info-container">';
        echo '<div class="slot-1">';
        if (isset($dressed_item[1])) {
            $this->showItem($dressed_item[1]);
        } else {
            $this->showItem(1);
        }
        echo '</div><!-- slot-1 -->';
        echo '<div class="slot-2">';
        if (isset($dressed_item[2])) {
            $this->showItem($dressed_item[2]);
        } else {
            $this->showItem(2);
        }
        echo '</div><!-- slot-2 -->';
        echo '<div class="slot-3">';
        if (isset($dressed_item[3])) {
            $this->showItem($dressed_item[3]);
        } else {
            $this->showItem(3);
        }
        echo '</div><!-- slot-3 -->';
        echo '<div class="slot-4">';
        if (isset($dressed_item[4])) {
            $this->showItem($dressed_item[4]);
        } else {
            $this->showItem(4);
        }
        echo '</div><!-- slot-4 -->';
        echo '<div class="slot-5">';
        if (isset($dressed_item[5])) {
            $this->showItem($dressed_item[5]);
        } else {
            $this->showItem(5);
        }
        echo '</div><!-- slot-5 -->';
        echo '<div class="slot-6">';
        if (isset($dressed_item[6])) {
            $this->showItem($dressed_item[6]);
        } else {
            $this->showItem(6);
        }
        echo '</div><!-- slot-6 -->';
        echo '<div class="slot-7">';
        if (isset($dressed_item[7])) {
            $this->showItem($dressed_item[7]);
        } else {
            $this->showItem(7);
        }
        echo '</div><!-- slot-7 -->';
        echo '<div class="slot-8">';
        if (isset($dressed_item[8])) {
            $this->showItem($dressed_item[8]);
        } else {
            $this->showItem(8);
        }
        echo '</div><!-- slot-8 -->';
        echo '<div class="slot-lower">';
        if (isset($dressed_item[9])) {
            $this->showItem($dressed_item[9]);
        } else {
            $this->showItem(9);
        }
        if (isset($dressed_item[10])) {
            $this->showItem($dressed_item[10]);
        } else {
            $this->showItem(10);
        }
        if (isset($dressed_item[11])) {
            $this->showItem($dressed_item[11]);
        } else {
            $this->showItem(11);
        }
        echo '</div><!-- slot-lower -->';
        echo '<div class="slot-image">';
        echo sprintf('<img src="/i/shadow/%s" alt="%s">', $this->shadow, $this->login);
        echo '</div><!-- slot-image -->';
        echo '<div class="user-signs">';
        echo sprintf('<img src="i/zodiac/%s.png" alt="Родовой знак">', $this->showStarSign());
        echo '</div><!-- user-signs -->';
        echo '<div class="user-info">';
        echo '<div class="stats-container">';
        echo '<div class="column">';
        echo 'Уровень:<br>Сила:<br>Ловкость:<br>Интуиция:<br>Выносливость:<br>Интеллект:<br>Мудрость:<br>Местонахождение:';
        echo '</div><!-- column -->';
        echo '<div class="column">';
        echo $this->level . '<br>' . $this->strength . '<br>' . $this->dexterity . '<br>' . $this->intuition . '<br>' . $this->endurance . '<br>' . $this->intelligence . '<br>' . $this->wisdom . '<br>' . $this->getRoomName($this->room);
        echo '</div><!-- column -->';
        echo '</div><!-- stats-container -->';
        if ($this->married) {
            echo sprintf('<a href = "inf.php?%s" target = _blank ><img alt = "В браке с %s" src = "i/married.gif" title = "В браке с %s"></a >', $this->married, $this->married, $this->married);
        }
        echo '<div class="debug">TODO: Сделать отображение имени. Сделать рассчёт здоровья и модификаторов. Вывести полоску здоровья когда будет от чего отталкиваться.</div>';
        echo '</div><!-- user-info -->';
        echo '</div><!-- user-info-container -->';
        echo '<hr><!-- Нижняя часть -->';
        echo '<div class="user-info-container-lower">';
        echo '<h2>Об игроке</h2>';
        if ($this->realname) {
            echo sprintf('Имя: %s<br>', $this->realname);
        }
        if ($this->info) {
            echo nl2br($this->info);
        }
        echo '</div><!-- user-info-container-lower -->';

        if ($this->watcherIsAdmin || $this->watcherIsModerator) {
            echo '<div class="secretInfo">';
            $infoString = '<b>Личное дело</b><br>ИД Игрока: %s<br> ДР Игрока: %s<br> IP Регистрации: %s';
            echo sprintf($infoString, $this->id, date('d.m.Y', strtotime($this->borndate)), $this->ip);
            if ($this->watcherIsAdmin) {
                $this->Bank = new Bank($this->id);
                $infoString = '<br><span>ИД Комнаты: %s<br> Деньги: %s<br> Деньги в банке: %s<br> Опыт: %s<br> Нераспределённые очки: %s<br> E-Mail: %s<br> Текущая сессия: %s</span>';
                echo sprintf($infoString, $this->room, $this->money, $this->Bank->money, $this->experience, $this->stat_points, $this->email, $this->session_id);
            }
            $this->UserLogs = new UserLogModel($this->id);
            while ($userLogRow = $this->UserLogs->getUserLog()->fetch_object()) {
                echo sprintf('<code>%s</code><br>', date("d.m.Y H:i ", strtotime($userLogRow->date)) . $userLogRow->text);
            }
            echo '</div>';
        }
    }

    public function showStarSign() {
     /*
      * 1 aries
      * 2 taurus
      * 3 gemini
      * 4 cancer
      * 5 leo
      * 6 virgo
      * 7 libra
      * 8 scorpio
      * 9 sagittarios
      * 10 capricorn
      * 11 aquarius
      * 12 pisches
     */
        $zodiac[356] = "10";
        $zodiac[326] = "09";
        $zodiac[296] = "08";
        $zodiac[266] = "07";
        $zodiac[235] = "06";
        $zodiac[203] = "05";
        $zodiac[172] = "04";
        $zodiac[140] = "03";
        $zodiac[111] = "02";
        $zodiac[78] = "01";
        $zodiac[51] = "12";
        $zodiac[20] = "11";
        $zodiac[0] = "10";
        $dayOfYear = date("z", strtotime($this->borndate));
        $isLeapYear = date("L", strtotime($this->borndate)); //Высокосный?
        if ($isLeapYear && $dayOfYear >59) {
            --$dayOfYear;
        }
        foreach ($zodiac as $day => $sign) {
            if ($dayOfYear > $day) {
                break;
            }
        }
        return $sign ?? null;
    }

    public function showPrivateUserInfo() {
        $this->watchingUser;
        function privateAccessCheck()
        {
            $own = db::c()->query('SELECT `align`,`admin` FROM `users` WHERE `id` = ?i', $uid)->fetch_assoc();
            if ($own['admin'] == 1) {
                return ADMINISTRATOR_ACCESS;
            } elseif ($own['align'] == 1) {
                return MODERATOR_ACCESS;
            }
            return false;
        }
    }
}