<?php

abstract class Item
{
    public $id;
    public $name;
    public $nalign;
    public $massa;
    public $maxdur;
    public $img;

    public $cost;
    public $artefact;

    public $type;

    public $nlevel;
    public $nsila;
    public $nlovk;
    public $ninta;
    public $nvinos;
    public $nintel;
    public $nmudra;
    public $nnoj;
    public $ntopor;
    public $ndubina;
    public $nmech;
    public $nfire;
    public $nwater;
    public $nair;
    public $nearth;
    public $nlight;
    public $ngray;
    public $ndark;

    public $minu;
    public $maxu;

    public $gsila;
    public $glovk;
    public $ginta;
    public $gintel;
    public $gnoj;
    public $gtopor;
    public $gdubina;
    public $gmech;
    public $gfire;
    public $gwater;
    public $gair;
    public $gearth;
    public $glight;
    public $ggray;
    public $gdark;
    public $ghp;

    public $bron1;
    public $bron2;
    public $bron3;
    public $bron4;

    public $mfkrit;
    public $mfakrit;
    public $mfuvorot;
    public $mfauvorot;

    public $dategoden;
    public $goden;
    public $needident;
    public $magic;
    public $magic_name;
    public $magic_img;
    public $isrep;
    public $gmp;

    public $encicl;

    public $koll;
    public $prof;
    public $prof1;

    public $count;
    public $razdel;
    public $ecost;
    public $zeton;
    public $onlyone;
    public $shshop;
    public $otdel;
    public $setsale;


    /**
     * Item constructor.
     *
     * @param $row
     */
    public function __construct($row)
    {
        foreach ($this as $key => $value) {
            if (isset($row[$key])) {
                $this->$key = $row[$key];
            }
        }

        switch ($this->type) {
            case 1:
                $this->typename = 'Серьги';
                break;
            case 2:
                $this->typename = 'Ожерелье';
                break;
            case 3:
                $this->typename = 'Оружие';
                break;
            case 4:
                $this->typename = 'Броня';
                break;
            case 5:
                $this->typename = 'Кольцо';
                break;

            case 8:
                $this->typename = 'Шлем';
                break;
            case 9:
                $this->typename = 'Перчатки';
                break;
            case 10:
                $this->typename = 'Щит';
                break;
            case 11:
                $this->typename = 'Обувь';
                break;
            case 12:
                $this->typename = 'Магический свиток';
                break;
            case 22:
                $this->typename = 'Рубашка';
                break;
            case 50:
                $this->typename = 'Волшебное зелье';
                break;
            case 200:
                $this->typename = 'Сувенир';
                break;
            default:
                $this->typename = 'Хлам';
        }
    }

    abstract public function printInfo();

    public function printImage()
    {
        echo <<<IMG
<img src="//{$_SERVER['SERVER_NAME']}/i/sh/{$this->img}" class="item-wrap-normal">
IMG;
    }

    protected function wrap($number)
    {
        if ($number > 0) return ": <b>" . $number . "</b>";
        else return ": <b style='color: maroon;'>" . $number . "</b>";
    }

    protected function printBaseInfo()
    {
        echo "<b>" . $this->name . "</b> (Масса: " . $this->massa . ")";
        if ($this->nalign) echo " <img src=i/align_{$this->nalign}.gif title='Этот предмет могут использовать только игроки с определённой склонностью.'> ";
        if ($this->maxdur > 0) echo "<br>Долговечность: {$this->maxdur}";
        if ($this->maxdur == -1) echo "<br>Долговечность: <i>неразрушимо</i>";
        echo "<br><i>{$this->typename}</i>";
    }

    protected function printRequirements()
    {
        if ($this->nlevel > 0) echo "<br>Требуется уровень" . $this->wrap($this->nlevel);
        if ($this->nnoj > 0) echo "<br>Требуется владение колющим оружиием" . $this->wrap($this->nnoj);
        if ($this->ndubina > 0) echo "<br>Требуется владение дробящим оружием" . $this->wrap($this->ndubina);
        if ($this->ntopor > 0) echo "<br>Требуется владение рубящим оружием" . $this->wrap($this->ntopor);
        if ($this->nmech > 0) echo "<br>Требуется владение режущим оружием" . $this->wrap($this->nmech);
        if ($this->nsila > 0) echo "<br>Требуется сила" . $this->wrap($this->nsila);
        if ($this->nlovk > 0) echo "<br>Требуется ловкость" . $this->wrap($this->nlovk);
        if ($this->ninta > 0) echo "<br>Требуется интуиция" . $this->wrap($this->ninta);
        if ($this->nvinos > 0) echo "<br>Требуется выносливость" . $this->wrap($this->nvinos);
        if ($this->nintel > 0) echo "<br>Требуется интеллект" . $this->wrap($this->nintel);
    }

    protected function printBonuses()
    {
        if ($this->gsila) echo "<br>Сила" . $this->wrap($this->gsila);
        if ($this->glovk) echo "<br>Ловкость" . $this->wrap($this->glovk);
        if ($this->ginta) echo "<br>Интуиция" . $this->wrap($this->ginta);
        if ($this->gintel) echo "<br>Интеллект" . $this->wrap($this->gintel);
        if ($this->minu AND $this->maxu) echo "<br>Урон: {$this->minu} - {$this->maxu}";
        if ($this->ghp) echo "<br>Здоровье" . $this->wrap($this->ghp);
        if ($this->gnoj) echo "<br>Владение колющим оружиием" . $this->wrap($this->gnoj);
        if ($this->gdubina) echo "<br>Владение дробящим оружием" . $this->wrap($this->gdubina);
        if ($this->gtopor) echo "<br>Владение рубящим оружием" . $this->wrap($this->gtopor);
        if ($this->gmech) echo "<br>Владение режущим оружием" . $this->wrap($this->gmech);
        if ($this->gfire) echo "<br>Владение магией огня" . $this->wrap($this->gfire);
        if ($this->gwater) echo "<br>Владение магией воды" . $this->wrap($this->gwater);
        if ($this->gair) echo "<br>Владение магией воздуха" . $this->wrap($this->gair);
        if ($this->gearth) echo "<br>Владение магией земли" . $this->wrap($this->gearth);
        if ($this->glight) echo "<br>Владение магией света" . $this->wrap($this->glight);
        if ($this->ggray) echo "<br>Владение магией серости" . $this->wrap($this->ggray);
        if ($this->gdark) echo "<br>Владение магией тьмы" . $this->wrap($this->gdark);
        if ($this->mfkrit) echo "<br>Шанс крита" . $this->wrap($this->mfkrit);
        if ($this->mfakrit) echo "<br>Шанс антикрита" . $this->wrap($this->mfakrit);
        if ($this->mfuvorot) echo "<br>Шанс уворота" . $this->wrap($this->mfuvorot);
        if ($this->mfauvorot) echo "<br>Шанс антиуворота" . $this->wrap($this->mfauvorot);
        if ($this->bron1) echo "<br>Броня головы" . $this->wrap($this->bron1);
        if ($this->bron2) echo "<br>Броня корпуса" . $this->wrap($this->bron2);
        if ($this->bron3) echo "<br>Броня пояса" . $this->wrap($this->bron3);
        if ($this->bron4) echo "<br>Броня ног" . $this->wrap($this->bron4);
        if ($this->magic AND $this->type != 12) {
            echo "<br>Магические свойства:";
            if ($this->magic_name) echo "<br><i style='color: dimgray;'>{$this->magic_name}</i>";
            else echo "<br><i style='color: dimgray;'>Неопознанная магия</i>";
            if ($this->magic_img AND $this->type != 50) echo <<<IMG
<br><img src="//{$_SERVER['SERVER_NAME']}/i/sh/{$this->magic_img}" class="item-wrap-normal">
IMG;
        }
    }
}