<?php

declare(strict_types=1);

final class StageScore
{
    /**
     * اولویت مراحل ثبت‌نام
     */
    private const STAGE_SCORES = [

        // شروع ثبت‌نام
        'start' => 20,

        // اطلاعات پایه
        'ign' => 35,
        'game_id' => 45,

        // عضویت اجباری
        'force_join' => 65,
        'private_channel' => 65,

        // دعوت دوستان
        'referral' => 75,

        // پرداخت
        'payment' => 100,
    ];

    public function calculate(array $row): array
    {
        $step = $this->normalize(
            $row['current_step'] ?? ''
        );

        $score = self::STAGE_SCORES[$step] ?? 0;

        return [
            'name'   => 'stage',
            'score'  => $score,
            'reason' => $score > 0
                ? "stage_{$step}"
                : null,
        ];
    }

    private function normalize(string $step): string
    {
        return match ($step) {
            'private_channel' => 'force_join',
            default => $step,
        };
    }
}