<?php

namespace App\Services\SchoolYears;

use App\Models\SchoolYear;
use Illuminate\Support\Facades\Schema;
use RuntimeException;

class SchoolYearWriteGuard
{
    public function assertEditable(array $schoolYears): void
    {
        if (!Schema::hasTable('school_years')) {
            return;
        }

        $years = array_values(array_unique(array_filter(array_map(
            static fn ($year) => is_string($year) ? trim($year) : null,
            $schoolYears
        ))));

        if ($years === []) {
            return;
        }

        $statuses = SchoolYear::query()
            ->whereIn('name', $years)
            ->get(['name', 'status'])
            ->keyBy('name');

        foreach ($years as $year) {
            $row = $statuses->get($year);
            if ($row && $row->status !== SchoolYear::STATUS_ACTIVE) {
                throw new RuntimeException(sprintf(
                    'School year %s is %s and read-only.',
                    $year,
                    $row->status
                ));
            }
        }
    }
}
