<?php

namespace App\Pipelines\Encyclopedia;

use App\Http\Integrations\Wikidata\Requests\GetEntityDataRequest;
use App\Http\Integrations\Wikidata\WikidataConnector;
use Closure;

class GetWikipediaPageTitleUsingWikidataId
{
    use TriesRemember;

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

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

        $pageTitle = $this->tryRememberForever(
            key: cache_key('wikipedia page title from wikidata id', $wikidataId),
            callback: fn () => $this->connector
                ->send(new GetEntityDataRequest($wikidataId))
                ->json("entities.$wikidataId.sitelinks.enwiki.title"),
        );

        return $next($pageTitle);
    }
}