<?php

declare(strict_types=1);

namespace App\Services;

use App\Repositories\ItemUnitRepository;
use InvalidArgumentException;
use RuntimeException;

final class ItemUnitService
{
    public function __construct(private ItemUnitRepository $repo) {}

    public function setBaseUnit(array $item, int $baseUnitId): void
    {
        if ($baseUnitId <= 0) {
            throw new InvalidArgumentException('اختر وحدة أساسية');
        }
        $this->repo->setBaseUnit((int)$item['id'], $baseUnitId);
    }

    public function addPack(array $item, int $packUnitId, float $factor, ?string $barcode): void
    {
        if ($packUnitId <= 0) {
            throw new InvalidArgumentException('اختر وحدة التعبئة');
        }
        if ($factor <= 0) {
            $factor = 1;
        }
        if ((int)($item['default_unit_id'] ?? 0) > 0 && $packUnitId === (int)$item['default_unit_id']) {
            throw new RuntimeException('لا يمكن جعل الوحدة الأساسية كوحدة تعبئة');
        }
        $this->repo->upsertPack((int)$item['id'], $packUnitId, $factor, $barcode ?: null);
    }

    public function deletePack(array $item, int $unitId): void
    {
        if ($unitId <= 0) {
            throw new InvalidArgumentException('وحدة غير صحيحة');
        }
        $this->repo->deletePack((int)$item['id'], $unitId);
    }
}
