<!DOCTYPE html>
<html lang="en">
<head>
  <script disable-devtool-auto src='https://cdn.jsdelivr.net/npm/disable-devtool@latest'></script>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/devtools-detector/2.0.17/devtools-detector.js"></script>
  <script src="https://embed.rgshows.me/js/protected_devtoolsdetector.js" defer></script>
  <script src="https://embed.rgshows.me/js/nocheats.js" defer></script>
  <script src="https://embed.rgshows.me/js/path.js" defer></script>
  <script type="text/javascript" data-cfasync="false">
    /*<![CDATA[/* */
    (function(){var x=window,g="f479743c933f69d6447b6b213eb8ecab",q=[["siteId",368*196+953+5088692],["minBid",0],["popundersPerIP","0"],["delayBetween",0],["default",false],["defaultPerDay",0],["topmostLayer","auto"]],u=["d3d3LnZpc2FyaW9tZWRpYS5jb20vdHBob25vbi1jb3JlLm1pbi5jc3M=","ZDEzazdwcmF4MXlpMDQuY2xvdWRmcm9udC5uZXQvYVB6cmJSL2VnaXRncmFwaC5taW4uanM=","d3d3Lm93bmdjeGJhdi5jb20veXBob25vbi1jb3JlLm1pbi5jc3M=","d3d3Lnd0cXZmZWpqenAuY29tL0NEL2FnaXRncmFwaC5taW4uanM="],m=-1,d,b,l=function(){clearTimeout(b);m++;if(u[m]&&!(1761942147000<(new Date).getTime()&&1<m)){d=x.document.createElement("script");d.type="text/javascript";d.async=!0;var f=x.document.getElementsByTagName("script")[0];d.src="https://"+atob(u[m]);d.crossOrigin="anonymous";d.onerror=l;d.onload=function(){clearTimeout(b);x[g.slice(0,16)+g.slice(0,16)]||l()};b=setTimeout(l,5E3);f.parentNode.insertBefore(d,f)}};if(!x[g]){try{Object.freeze(x[g]=q)}catch(e){}l()}})();
    /*]]>/* */
  </script>    
  <title>RgShows Api 1</title>
  <link rel="stylesheet" href="https://cdn.vidstack.io/player/theme.css" />
  <link rel="stylesheet" href="https://cdn.vidstack.io/player/video.css" />
  <style>

    body {
      background-color: #121212;
      color: #fff;
      font-family: Arial, sans-serif;
      margin: 0;
      height: 100vh;
      overflow: hidden;
    }
    #player-container {
      position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #000;
}
    #controls {
      position: absolute;
  top: 10px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 1000;
}
#target {
      width: 100%;
      height: 100%;
    }
    #languageSelect, #subServerSelect {
      background: rgba(0, 0, 0, 0.7);
      color: #fff;
      border: 1px solid #333;
      padding: 10px;
      border-radius: 5px;
      cursor: pointer;
    }
    #languageSelect option, #subServerSelect option {
      background: #333;
    }
    #languageSelect:focus, #subServerSelect:focus {
      outline: none;
    }
    #subServerSelect {
        display: none;
    }
  </style>  
  <script type="module">
    import { VidstackPlayer, VidstackPlayerLayout, TextTrack } from 'https://cdn.vidstack.io/player';
  
    // Define proxies and APIs
const proxies = [
    "https://api.codetabs.com/v1/proxy/?quest=",
    "https://api.cors.lol/?url=",
    "https://rgproxy.notowner.workers.dev/?u="
];

const apis = [
    "https://expected-erika-rgshows-06042e31.koyeb.app"
];

// Function to get a random element from an array
function getRandomElement(arr) {
    return arr[Math.floor(Math.random() * arr.length)];
}

// Create a randomly mixed baseApiUrl
const baseApiUrl = `${getRandomElement(proxies)}${getRandomElement(apis)}`;
const movieRoutes = {
      "Valhalla": baseApiUrl + "/vidlink/movie/",
      "Asgard": baseApiUrl + "/vidapi/movie/",
      "Atlantis": baseApiUrl + "/spenembed/movie/",
      "Lyonesse": baseApiUrl + "/flixhq/movie/",
      "Olympus": baseApiUrl + "/vidsrc_vip/movie/",
      "Elysium": baseApiUrl + "/maxflix/movie/",
      "Hyperborea": baseApiUrl + "/flicky/movie/",
      "Avalon": baseApiUrl + "/vidsrc_su/movie/",
      "El Dorado": baseApiUrl + "/viet/movie/",
      "Arcadia": baseApiUrl + "/embed/movie/",
      "Nirvana": baseApiUrl + "/tasf/movie/"
    };
  
    function parseStream(server, data) {
      switch (server) {
        case "upcloud":
        case "megacloud":
          return data.stream ? [{ url: data.stream, quality: "default" }] : null;
        case "Olympus":
          return data.stream?.url ? [{ url: data.stream.url, quality: "default" }] : null;
        case "Avalon":
          return data.stream?.url ? [{ url: data.stream.url, quality: "default" }] : null;
        case "Valhalla":
          return data.stream?.url ? [{ url: data.stream.url, quality: "default" }] : null;
        case "Asgard":
          return data.stream?.url ? [{ url: data.stream.url, quality: "default" }] : null;
        case "Atlantis":
          return data.stream?.url ? [{ url: data.stream.url, quality: "default" }] : null;
        case "Elysium":
          return Array.isArray(data.stream)
            ? data.stream.map(s => ({ url: s.url, quality: s.quality }))
            : null;
        case "El Dorado":
          return data.stream?.url ? [{ url: data.stream.url, quality: "default" }] : null;
        case "Nirvana":
          return data.stream?.url ? [{ url: data.stream.url, quality: "default" }] : null;
        case "Arcadia":
            return Array.isArray(data.stream) 
                ? data.stream.map(s => ({ url: s.url, quality: s.quality })) 
                : null;
        case "Hyperborea":
          return Array.isArray(data.stream)
            ? data.stream.map(s => ({ url: s.url, quality: s.quality }))
            : null;
        case "Lyonesse":
          return data.stream?.url ? [{ url: data.stream.url, quality: "default" }] : null;
        default:
          return null;
      }
    }
  
    async function fetchStream(server, apiUrl, tmdbId, title, poster) {
      const languageSelect = document.getElementById("languageSelect");
  
      try {
        const response = await fetch(apiUrl + tmdbId);
        if (!response.ok) throw new Error("Invalid response");
  
        const data = await response.json();
        const streams = parseStream(server, data);
  
        if (streams) {
          const option = document.createElement("option");
          option.value = JSON.stringify({ url: streams[0]?.url, streams });
          option.textContent = server;
          languageSelect.appendChild(option);
  
          if (languageSelect.options.length === 1) {
            const firstStream = JSON.parse(option.value);
            initializePlayer(firstStream.url, title, poster, tmdbId);
            setupSubServerDropdown(firstStream.streams);
          }
  
          languageSelect.onchange = () => {
            const selectedOption = JSON.parse(languageSelect.value);
            initializePlayer(selectedOption.url, title, poster, tmdbId);
            setupSubServerDropdown(selectedOption.streams);
          };
        }
      } catch (error) {
        console.error(`Error fetching stream from ${server}:`, error);
      }
    }
  
    async function initializePlayer(url, title, poster, tmdbId) {
      const playerContainer = document.getElementById('player-container');
      playerContainer.innerHTML = '';
  
      const targetElement = document.createElement('div');
      targetElement.id = 'target';
      playerContainer.appendChild(targetElement);
  
      const player = await VidstackPlayer.create({
        target: '#target',
        src: url,
        layout: new VidstackPlayerLayout(),
        title: title,
        poster: poster,
      });
  
      addSubtitles(player, tmdbId);
    }
  
    function setupSubServerDropdown(streams) {
      const subServerSelect = document.getElementById("subServerSelect");
      subServerSelect.innerHTML = "";
  
      if (!streams || streams.length <= 1) {
        subServerSelect.style.display = "none";
        return;
      }
  
      streams.forEach((stream, index) => {
        const option = document.createElement("option");
        option.value = stream.url;
        option.textContent = `Subserver ${index + 1} (${stream.quality || "unknown"}p)`;
        subServerSelect.appendChild(option);
      });
  
      subServerSelect.style.display = "inline-block";
      subServerSelect.onchange = () => {
        const selectedUrl = subServerSelect.value;
        initializePlayer(selectedUrl);
      };
    }
  
    async function addSubtitles(player, tmdbId) {
      try {
        const subtitlesEndpoint = `https://sub.wyzie.ru/search?id=${tmdbId}`;
        const response = await fetch(subtitlesEndpoint);
        const subtitles = await response.json();
  
        if (Array.isArray(subtitles)) {
          const uniqueSubtitles = {};
  
          subtitles.forEach((subtitle) => {
            if (!uniqueSubtitles[subtitle.language]) {
              uniqueSubtitles[subtitle.language] = subtitle;
            }
          });
  
          Object.values(uniqueSubtitles).forEach((subtitle) => {
            const track = new TextTrack({
              src: subtitle.url,
              kind: 'subtitles',
              label: subtitle.display,
              language: subtitle.language,
              type: subtitle.format || 'vtt',
              default: subtitle.language === 'en',
            });
  
            player.textTracks.add(track);
          });
        }
      } catch (error) {
        console.error('Error fetching subtitles:', error);
      }
    }
  
    async function initialize() {
      const urlParams = new URLSearchParams(window.location.search);
      const tmdbId = urlParams.get("id");
  
      if (!tmdbId) {
        alert("TMDB ID is missing!");
        return;
      }
  
      const tmdbApiKey = 'f6e840332142f77746185ab4e67be858';
      const tmdbEndpoint = `https://tmdb.rgshows.me/tmdb/3/movie/${tmdbId}?api_key=${tmdbApiKey}`;
      const response = await fetch(tmdbEndpoint);
      const movieData = await response.json();
      const title = movieData.title || 'Untitled';
  
      const poster = movieData.poster_path
        ? `https://image.tmdb.org/t/p/w500${movieData.poster_path}`
        : 'path/to/default/poster.jpg';
  
      for (const [server, apiUrl] of Object.entries(movieRoutes)) {
        fetchStream(server, apiUrl, tmdbId, title, poster);
      }
    }
  
    document.addEventListener("DOMContentLoaded", initialize);
  </script>  
</head>
<body>
  <div id="player-container"></div>
  <div id="target"></div>
  <div id="controls">
    <select id="languageSelect"></select>
    <select id="subServerSelect"></select>
  </div>
  <script type="text/javascript" data-cfasync="false">
    /*<![CDATA[/* */
    (function(){var x=window,g="f479743c933f69d6447b6b213eb8ecab",q=[["siteId",368*196+953+5088692],["minBid",0],["popundersPerIP","0"],["delayBetween",0],["default",false],["defaultPerDay",0],["topmostLayer","auto"]],u=["d3d3LnZpc2FyaW9tZWRpYS5jb20vdHBob25vbi1jb3JlLm1pbi5jc3M=","ZDEzazdwcmF4MXlpMDQuY2xvdWRmcm9udC5uZXQvYVB6cmJSL2VnaXRncmFwaC5taW4uanM=","d3d3Lm93bmdjeGJhdi5jb20veXBob25vbi1jb3JlLm1pbi5jc3M=","d3d3Lnd0cXZmZWpqenAuY29tL0NEL2FnaXRncmFwaC5taW4uanM="],m=-1,d,b,l=function(){clearTimeout(b);m++;if(u[m]&&!(1761942147000<(new Date).getTime()&&1<m)){d=x.document.createElement("script");d.type="text/javascript";d.async=!0;var f=x.document.getElementsByTagName("script")[0];d.src="https://"+atob(u[m]);d.crossOrigin="anonymous";d.onerror=l;d.onload=function(){clearTimeout(b);x[g.slice(0,16)+g.slice(0,16)]||l()};b=setTimeout(l,5E3);f.parentNode.insertBefore(d,f)}};if(!x[g]){try{Object.freeze(x[g]=q)}catch(e){}l()}})();
    /*]]>/* */
  </script>    
  <script src="https://vjs.zencdn.net/8.12.0/video.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
  <!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-HVCN1EQT8R"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-HVCN1EQT8R');
</script>
  </body>
  </html>
