<?php

namespace App\Services\Part;

use App\Entities\Equipment\ServerPartEntity;
use App\Helpers\Part\DISKHelper;
use App\Models\Part\DISKModel;


class DISKService extends PartService
{
    public function __construct()
    {
        parent::__construct(new DISKModel(), new DISKHelper());
        $this->addClassName('DISK');
    }
    public function getFormFields(): array
    {
        return [
            "title",
            "price",
            "stock",
            "format",
            "status",
        ];
    }
    public function getFormFilters(): array
    {
        return [
            'status',
        ];
    }
    public function getIndexFields(): array
    {
        return [
            "title",
            "price",
            "stock",
            "format",
            "status",
        ];
    }
    public function getBatchjobFields(): array
    {
        return ['status'];
    }
    //기본 기능부분
    //FieldForm관련용
    //OrderBy 처리
    public function setOrderBy(mixed $field = null, mixed $value = null): void
    {
        $this->getModel()->orderBy('title ASC');
        parent::setOrderBy($field, $value);
    }

    //서버파트관련 작업
    public function unsetServerPart(ServerPartEntity $serverPartEntity): void
    {
        //부품정보가져오기
        $entity = $this->getEntity($serverPartEntity->getPartUID());
        if (!$entity) {
            throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다.");
        }
        //부품정보에 서버정보 설정 및 서비스,고객정보 정의
        if ($entity->getStock() < $serverPartEntity->getCnt()) {
            throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다.");
        }
        parent::modify($entity, ['format' => $entity->getFormat() + $serverPartEntity->getCnt()]);
    }
}
