<?php
# Date: 29.08.2021 (21:34)
namespace Battles;

use Battles\Database\Db;

class Shop
{
    public const GENERAL_SHOP = 1;
    public const BARTER_SHOP = 2;
    public const CATEGORY_SALE_ITEMS = -1;
    public int $categoryType = 0;
    private int $shopId;

    private function __construct($shop_id)
    {
        $this->shopId = $shop_id;
    }

    public static function id($shopid): self
    {
        return new self($shopid);
    }

    private function showGoods(): string
    {
        if ($this->categoryType) {
            $stmt = Db::getInstance()->ofetchAll('select * from items inner join trade_offers on id = shop_item_id where shop_id = ? and shop_item_quantity !=0 and item_type = ?', [$this->shopId, $this->categoryType]);
            $stmt2 = Db::getInstance()->ofetchAll('select * from inventory where on_sale != 0 and present is null and item_type = ?', $this->categoryType);
        } else {
            $stmt = Db::getInstance()->ofetchAll('select * from items inner join trade_offers on id = shop_item_id where shop_id = ? and shop_item_quantity !=0', $this->shopId);
            $stmt2 = Db::getInstance()->ofetchAll('select * from inventory where on_sale != 0 and present is null');
        }

        $iteminfo = [];
        foreach ($stmt as $item) {
            $iteminfo[] = new ShopItem($item, 'buyshop');
        }
        foreach ($stmt2 as $item) {
            $iteminfo[] = new ShopItem($item, 'buymarket');
        }
        return $this->strFromArr($iteminfo);
    }

    private function showUserSellItems(): string
    {
        $stmt = Db::getInstance()->ofetchall('select * from inventory where on_sale = 0 and dressed_slot = 0 and durability > 0 and owner_id = ?', User::getInstance()->getId());

        $iteminfo = [];
        $operationType = 'sellshop';
        if ($this->categoryType === self::BARTER_SHOP) {
            $operationType = 'setmarket';
        }
        foreach ($stmt as $item) {
            $iteminfo[] = new ShopItem($item, $operationType);
        }
        return $this->strFromArr($iteminfo);
    }

    private function strFromArr(array $array): string
    {
        $str = '';
        $format = '<div class="row item"><div class="left column">%s%s</div><div class="right column">%s</div></div>';
        foreach ($array as $a) {
            $str .= sprintf($format, $a->printImage(), $a->printControls(), $a->printInfo());
        }
        return $str;
    }

    public function getCategoryName(): string
    {
        $names = [
            Item::ITEM_TYPE_HELMET => 'Шлемы',
            Item::ITEM_TYPE_ARMOR => 'Броня',
            Item::ITEM_TYPE_LEGS => 'Поножи',
            Item::ITEM_TYPE_BOOTS => 'Сапоги',
            Item::ITEM_TYPE_GLOVES => 'Перчатки',
            Item::ITEM_TYPE_WEAPON => 'Оружие',
            Item::ITEM_TYPE_SHIELD => 'Щиты',
            Item::ITEM_TYPE_BELT => 'Пояса',
            Item::ITEM_TYPE_RING => 'Кольца',
            Item::ITEM_TYPE_AMULET => 'Амулеты',
            Item::ITEM_TYPE_CONSUMABLE => 'Расходники',
            Item::ITEM_TYPE_OTHER => 'Разное',
            self::CATEGORY_SALE_ITEMS => 'Предметы в инвентаре',
            0 => 'Все товары',
        ];
        return $names[$this->categoryType];
    }

    public function getItemsList(): string
    {
        return $this->categoryType !== self::CATEGORY_SALE_ITEMS || $this->categoryType !== self::BARTER_SHOP ? $this->showGoods() : $this->showUserSellItems();
    }
}