<?php

declare(strict_types=1);

final class ReminderPolicy
{
    /**
     * تعیین تصمیم نهایی بر اساس امتیاز
     */
    public function resolve(
        ReminderDecision $decision
    ): ReminderDecision {

        $score = $decision->score;


        /*
         * جلوگیری از اسپم شدن کاربر
         */
        $fatigue =
            $decision->scores['fatigue'] ?? 0;


        if ($fatigue <= -80) {

            $decision->deny('high_fatigue');

            return $decision;
        }



        /*
         * امتیاز کلی پایین
         */
        if ($score < 60) {

            $decision->deny('low_score');

            return $decision;
        }



        $decision->allow();


        /*
         * شدت Reminder
         */
        if ($score >= 180) {

            $decision->setLevel('urgent');

        } elseif ($score >= 120) {

            $decision->setLevel('normal');

        } else {

            $decision->setLevel('soft');

        }


        return $decision;
    }
}