<?php

namespace App\Actions\Branch;

use Closure;
use Exception;
use LogicException;
use App\Actions\BaseAction;
use App\Commands\Series\CreateSeriesCommand;
use App\DataObjects\CreateBranchDTO;
use App\DataObjects\CreateSeriesDTO;
use Spatie\LaravelData\Data;

class StoreBranchSeries extends BaseAction
{

    public function __construct(
        private CreateSeriesCommand $createSeriesCommand
    ) {}

    public function __invoke(CreateBranchDTO|Data $payload, Closure $next)
    {
        try {
            $seriesPayload = CreateSeriesDTO::from(['branch_id' => $payload->branch->id, 'series' => $payload->data['series'], 'is_start' => true]);

            $payload->series = $this->createSeriesCommand->execute($seriesPayload->toArray());

            return $next($payload);
        } catch (Exception $exception) {
            throw new LogicException('Failed to create branch series', $exception->getMessage());
        }
    }
}
