IMDb to Stremio

Adds Stremio App link next to IMDb movie and TV series title.

// ==UserScript==
// @name         IMDb to Stremio
// @namespace    zero404
// @license      MIT
// @version      1.0
// @description  Adds Stremio App link next to IMDb movie and TV series title.
// @author       zero404
// @match        https://www.imdb.com/title/tt*/*
// @match        https://www.imdb.com/*/title/tt*/*
// @icon         https://upload.wikimedia.org/wikipedia/commons/7/72/Stremio_logo.png
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    function parseImdbInfo() {
        const pathMatch = window.location.pathname.match(/\/(?:[a-z]{2}\/)?title\/(tt\d+)/i);
        if (!pathMatch) return null;
        const imdbId = pathMatch[1];

        const script = document.querySelector('script[type="application/ld+json"]');
        if (!script) return null;
        let data;
        try {
            data = JSON.parse(script.textContent);
        } catch {
            return null;
        }

        const atype = String(data['@type'] || '').toLowerCase();
        let type;
        if (atype === 'movie') {
            type = 'movie';
        } else if (atype === 'tvseries') {
            type = 'series';
        } else {
            return null;
        }

        return { imdbId, type };
    }

    function insertStremioIcon() {
        const info = parseImdbInfo();
        if (!info) return;

        const link = document.createElement('a');
        link.href = `stremio:///detail/${info.type}/${info.imdbId}`;
        link.title = 'Open in Stremio';
        link.style.display = 'inline-block';
        link.style.marginLeft = '0.3em';

        const img = document.createElement('img');
        img.src = 'https://upload.wikimedia.org/wikipedia/commons/7/72/Stremio_logo.png';
        img.alt = 'Stremio';
        img.style.width = '36px';
        img.style.height = '36px';
        img.style.verticalAlign = 'middle';

        link.appendChild(img);

        const titleEl = document.querySelector('h1') || document.querySelector('[data-testid="hero-title-block__title"]');
        if (titleEl) {
            titleEl.appendChild(link);
        }
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', insertStremioIcon);
    } else {
        insertStremioIcon();
    }
})();