<?php

class Formula1Bridge extends BridgeAbstract
{
    const NAME = 'Formula1 Bridge';
    const URI = 'https://formula1.com/';
    const DESCRIPTION = 'Returns latest official Formula 1 news';
    const MAINTAINER = 'axor-mst';

    const API_KEY = 'xZ7AOODSjiQadLsIYWefQrpCSQVDbHGC';
    const API_URL = 'https://api.formula1.com/v1/editorial/articles?limit=%u';

    const ARTICLE_AUTHOR = 'Formula 1';
    const ARTICLE_URL = 'https://formula1.com/en/latest/article/%s.%s';

    const LIMIT_MIN = 1;
    const LIMIT_DEFAULT = 10;
    const LIMIT_MAX = 100;

    const PARAMETERS = [
        [
            'limit' => [
                'name' => 'Limit',
                'type' => 'number',
                'required' => false,
                'title' => 'Number of articles to return',
                'exampleValue' => self::LIMIT_DEFAULT,
                'defaultValue' => self::LIMIT_DEFAULT
            ]
        ]
    ];

    public function collectData()
    {
        $limit = $this->getInput('limit') ?: self::LIMIT_DEFAULT;
        $limit = min(self::LIMIT_MAX, max(self::LIMIT_MIN, $limit));
        $url = sprintf(self::API_URL, $limit);

        $json = json_decode(getContents($url, [
            'Accept: application/json',
            'apikey: ' . self::API_KEY,
            'locale: en'
        ]));
        if (property_exists($json, 'error')) {
            returnServerError($json->message);
        }
        $list = $json->items;

        foreach ($list as $article) {
            if (property_exists($article->thumbnail, 'caption')) {
                $caption = $article->thumbnail->caption;
            } else {
                $caption = $article->thumbnail->image->title;
            }

            $item = [];
            $item['uri'] = sprintf(self::ARTICLE_URL, $article->slug, $article->id);
            $item['title'] = $article->title;
            $item['timestamp'] = $article->updatedAt;
            $item['author'] = self::ARTICLE_AUTHOR;
            $item['enclosures'] = [$article->thumbnail->image->url];
            $item['uid'] = $article->id;
            $item['content'] = sprintf(
                '<p>%s</p><a href="%s" target="_blank"><img src="%s" alt="%s" title="%s"></a>',
                $article->metaDescription ?? $article->title,
                $item['uri'],
                $item['enclosures'][0],
                $caption,
                $caption
            );
            $this->items[] = $item;
        }
    }
}