<?PHP

class TestFaktaBridge extends BridgeAbstract
{
    const NAME = 'Testfakta';
    const URI = 'https://www.testfakta.se';
    const DESCRIPTION = 'Letest independent tests by Testfakta';
    const MAINTAINER = 'ajain-93';

    public function getIcon()
    {
        return self::URI . '/themes/testfakta/favicon.ico';
    }

    private function parseSwedishDates($dateString)
    {
        // Mapping of Swedish month names to English month names
        $months = [
            'Jan' => 'Jan',
            'Feb' => 'Feb',
            'Mar' => 'Mar',
            'Apr' => 'Apr',
            'Maj' => 'May',
            'Jun' => 'Jun',
            'Jul' => 'Jul',
            'Aug' => 'Aug',
            'Sep' => 'Sep',
            'Okt' => 'Oct',
            'Nov' => 'Nov',
            'Dec' => 'Dec'
        ];

        // Replace Swedish month names with English
        $dateString = preg_replace_callback(
            '/\b(' . implode('|', array_keys($months)) . ')\b/',
            function ($matches) use ($months) {
                return $months[$matches[0]];
            },
            $dateString
        );

        // Create DateTime object
        $dateValue = DateTime::createFromFormat(
            'd M, Y',
            trim($dateString),
            new DateTimeZone('Europe/Stockholm')
        );
        if ($dateValue) {
            $dateValue->setTime(0, 0); // Set time to 00:00
            return $dateValue->getTimestamp();
        }

        return $dateValue ? $dateValue->getTimestamp() : false;
    }

    public function collectData()
    {
        $NEWSURL = self::URI . '/sv';
        $html = getSimpleHTMLDOMCached($NEWSURL, 18000) or
            returnServerError('Could not request: ' . $NEWSURL);

        foreach ($html->find('.row-container') as $element) {
            // Debug::log($element);

            $title = $element->find('h2', 0)->plaintext;
            $category = trim($element->find('.red-label', 0)->plaintext);
            $url = self::URI . $element->find('a', 0)->getAttribute('href');
            $figure = $element->find('img', 0);
            $preamble = trim($element->find('.text', 0)->plaintext);

            $article_html = getSimpleHTMLDOMCached($url, 18000) or
                returnServerError('Could not request: ' . $url);
            $article_content = $article_html->find('div.content', 0);
            $article_text = $article_html->find('article', 0);

            $requestor = $article_html->find('div.uppdrag', 0)->plaintext;
            $author = trim($article_html->find('span.name', 0)->plaintext);
            $published = $this->parseSwedishDates(
                str_replace(
                    'Publicerad: ',
                    '',
                    trim($article_html->find('span.created', 0)->plaintext)
                )
            );

            $content = $figure . '<br/>';
            $content .= '<b>' . strtoupper($category) . '</b>  ' . $requestor . '<br/><br/>';
            $content .= '<b><i>' . $preamble . '</i></b><br/><br/>';
            $content .= $article_text;

            $this->items[] = [
                'uri' => $url,
                'title' => $title,
                'author' => $author,
                'timestamp' => $published,
                'content' => trim($content),
            ];
        }
    }
}
