<?php

namespace App\Services\Athlete;

use App\Models\AthleteAssessment;
use Illuminate\Support\Collection;

class ProgressChartService
{
    /**
     * @param  Collection<int, AthleteAssessment>  $assessments  باید صعودی بر اساس تاریخ باشد
     * @return array<int, array{label: string, value: float|null}>
     */
    public function series(Collection $assessments, string $field): array
    {
        return $assessments
            ->map(fn (AthleteAssessment $a) => [
                'label' => verta($a->assessment_date)->format('m/d'),
                'value' => $a->{$field} !== null ? (float) $a->{$field} : null,
            ])
            ->values()
            ->all();
    }

    /**
     * برای هر زاویه، اولین و آخرین عکس موجود در تاریخچه را برمی‌گرداند (بند ۱۲/۱۶).
     *
     * @param  Collection<int, AthleteAssessment>  $assessments  صعودی بر اساس تاریخ، با eager-load شده‌ی photos
     * @return array<string, array{before: mixed, after: mixed}>
     */
    public function photoComparisonPairs(Collection $assessments): array
    {
        $byAngle = [];

        foreach ($assessments as $assessment) {
            foreach ($assessment->photos as $photo) {
                $angle = $photo->angle->value;
                $byAngle[$angle] ??= [];
                $byAngle[$angle][] = $photo;
            }
        }

        $pairs = [];
        foreach ($byAngle as $angle => $photos) {
            $pairs[$angle] = [
                'before' => $photos[0],
                'after' => $photos[count($photos) - 1],
                'label' => $photos[0]->angle->label(),
            ];
        }

        return $pairs;
    }
}
