<?php
# Date: 16.09.2020 (08:45)
namespace Battles\Magic;

use Battles\Database\Db;

class Magic
{
    protected string $status;
    private Db $db;
    private object $magic;

    public function __construct(Db $db, int $id)
    {
        $this->magic = $db->ofetch('select * from magic where id = ?', $id);
    }

    public function getMagic(): object
    {
        return $this->magic;
    }

    protected function isVisible($caster, $target): bool
    {
        if ($caster->battle != $target->battle || $caster->room != $target->room) {
            $this->status = 'Вы не видите цель!';
            return false;
        } else {
            return true;
        }
    }

    protected function isNotDead($caster): bool
    {
        if ($caster->health < 1) {
            $this->status = 'Вы мертвы!';
            return false;
        } else {
            return true;
        }
    }

    protected function enoughMana($caster): bool
    {
        if ($caster->mana < 1) {
            $this->status = 'Недостаточно пыли!';
            return false;
        } else {
            return true;
        }
    }

    protected function isNotInBattle($caster): bool
    {
        if ($caster->battle) {
            $this->status = 'Невозможно применить в поединке!';
            return false;
        } else {
            return true;
        }
    }

    /**
     * Проверка на успех заклинания. Чем выше интеллект, тем выше шанс успеха.
     * @param     $caster - заклинатель (массив значений из базы).
     * @param int $difficulty - сложность произнесения заклинания. Чем выше значение, тем сложнее проверка. 40 - самая сложная проверка.
     *
     * @return bool
     */
    protected function isSuccess($caster, int $difficulty = 40): bool
    {
        # 40 - потолок стата.
        if ($difficulty > 40) {
            $difficulty = 40;
        }
        return mt_rand(1, $difficulty) < $caster->intelligence;
    }
}