<?php

namespace App\Actions\Branch;

use App\Actions\BaseAction;
use App\Commands\Branches\CreateBranchCommand;
use App\DataObjects\CreateBranchDTO;
use Closure;
use Exception;
use LogicException;
use Spatie\LaravelData\Data;

class StoreBranch extends BaseAction
{
    public function __construct(private readonly CreateBranchCommand $createBranchCommand) {}

    /**
     * @throws Exception
     */
    public function __invoke(CreateBranchDTO|Data $payload, Closure $next)
    {
        try {

            $payload->branch = $this->createBranchCommand->execute($payload->data);

            return $next($payload);

        } catch (Exception $exception) {
            throw new LogicException('Error Storing Branch: '.$exception->getMessage());
        }
    }
}
