<?php

namespace App\MetadataResolver;

use GuzzleHttp\Client;

class KomifloResolver implements Resolver
{
    /**
     * @var Client
     */
    private $client;

    public function __construct(Client $client)
    {
        $this->client = $client;
    }

    public function resolve(string $url): Metadata
    {
        if (preg_match('~komiflo\.com(?:/#!)?/comics/(\\d+)~', $url, $matches) !== 1) {
            throw new \RuntimeException("Unmatched URL Pattern: $url");
        }
        $id = $matches[1];

        $res = $this->client->get('https://api.komiflo.com/content/id/' . $id);
        if ($res->getStatusCode() === 200) {
            $json = json_decode($res->getBody()->getContents(), true);
            $metadata = new Metadata();

            $metadata->title = $json['content']['data']['title'] ?? '';
            $metadata->description = ($json['content']['attributes']['artists']['children'][0]['data']['name'] ?? '?') .
                ' - ' .
                ($json['content']['parents'][0]['data']['title'] ?? '?');
            $metadata->image = 'https://t.komiflo.com/564_mobile_large_3x/' . $json['content']['named_imgs']['cover']['filename'];

            // 作者情報
            if (!empty($json['content']['attributes']['artists']['children'])) {
                foreach ($json['content']['attributes']['artists']['children'] as $artist) {
                    $metadata->tags[] = preg_replace('/\s/', '_', $artist['data']['name']);
                }
            }

            // タグ
            if (!empty($json['content']['attributes']['tags']['children'])) {
                foreach ($json['content']['attributes']['tags']['children'] as $tag) {
                    $metadata->tags[] = preg_replace('/\s/', '_', $tag['data']['name']);
                }
            }

            return $metadata;
        } else {
            throw new \RuntimeException("{$res->getStatusCode()}: $url");
        }
    }
}