<?php

namespace App\Pipelines\Encyclopedia;

use App\Http\Integrations\MusicBrainz\MusicBrainzConnector;
use App\Http\Integrations\MusicBrainz\Requests\SearchForArtistRequest;
use Closure;

class GetMbidForArtist
{
    use TriesRemember;

    public function __construct(private readonly MusicBrainzConnector $connector)
    {
    }

    public function __invoke(?string $name, Closure $next): mixed
    {
        if (!$name) {
            return $next(null);
        }

        $mbid = $this->tryRememberForever(
            key: cache_key('artist mbid', $name),
            callback: fn () => $this->connector->send(new SearchForArtistRequest($name))->json('artists.0.id'),
        );

        return $next($mbid);
    }
}