<?php

declare(strict_types=1);

final class InactivityScore
{
    public function calculate(array $row): array
    {
        $lastActivity = strtotime(
            $row['step_changed_at']
                ?? $row['created_at']
                ?? 'now'
        );

        if ($lastActivity === false) {
            return [
                'name'   => 'inactivity',
                'score'  => 0,
                'reason' => null,
            ];
        }

        $inactiveSeconds = time() - $lastActivity;
        $inactiveMinutes = (int) floor($inactiveSeconds / 60);

        $score = match (true) {

            // کمتر از ۱۰ دقیقه
            $inactiveMinutes < 10 => 0,

            // ۱۰ تا ۳۰ دقیقه
            $inactiveMinutes < 30 => 10,

            // ۳۰ دقیقه تا ۱ ساعت
            $inactiveMinutes < 60 => 20,

            // ۱ تا ۳ ساعت
            $inactiveMinutes < 180 => 35,

            // ۳ تا ۶ ساعت
            $inactiveMinutes < 360 => 50,

            // ۶ تا ۱۲ ساعت
            $inactiveMinutes < 720 => 65,

            // ۱۲ تا ۲۴ ساعت
            $inactiveMinutes < 1440 => 80,

            // بیشتر از یک روز
            default => 100,
        };

        return [
            'name'   => 'inactivity',
            'score'  => $score,
            'reason' => $score > 0
                ? 'inactive_' . $inactiveMinutes . '_minutes'
                : null,
        ];
    }
}