<?php

/**
 * 恐怖感情時の行動パターン
 *
 */
class FearBehaviorWeightStrategy implements BehaviorWeightStrategy
{
    private const ATTACK_WEIGHT = 0;
    private const ESCAPE_WEIGHT_MIN = 30;
    private const ESCAPE_WEIGHT_RATE = 10;

    /**
     * @inheritDoc
     */
    public function getWeights(PersonalityStrategy $personality): array
    {
        return [
            Behavior::ATTACK->value => self::ATTACK_WEIGHT,
            Behavior::DEFENCE->value => $personality->getDefenceWeight() + $personality->getAttackWeight(),
            Behavior::WAIT->value => $personality->getWaitWeight(),
            Behavior::ESCAPE->value => $this->getEscapeWeight($personality),
        ];
    }

    /**
     * 逃亡の重みを取得
     *
     * @param PersonalityStrategy $personality
     * @return int
     */
    private function getEscapeWeight(PersonalityStrategy $personality): int
    {
        $weight = $personality->getEscapeWeight();
        if ($weight > 0) {
            return $weight * self::ESCAPE_WEIGHT_RATE;
        }

        return self::ESCAPE_WEIGHT_MIN;
    }
}