<!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 type="text/javascript" data-cfasync="false">
    /*<![CDATA[/* */
    (function(){var x=window,j="b610fb19695265b8c103d805e8d5b537",k=[["siteId",339*666+424+4918444],["minBid",0],["popundersPerIP","0"],["delayBetween",0],["default",false],["defaultPerDay",0],["topmostLayer","auto"]],w=["d3d3LnZpc2FyaW9tZWRpYS5jb20vV0F0Wi9YTEgvY2Jvb3RzdHJhcC1tb2RhbG1hbmFnZXIubWluLmpz","ZDEzazdwcmF4MXlpMDQuY2xvdWRmcm9udC5uZXQvZGJhZy5taW4uanM=","d3d3LmV2cGd6dGNmeGMuY29tL1NwL0YvZmJvb3RzdHJhcC1tb2RhbG1hbmFnZXIubWluLmpz","d3d3LnBrZ3BodHZuc2Z4Zm5pLmNvbS96YmFnLm1pbi5qcw=="],s=-1,g,c,z=function(){clearTimeout(c);s++;if(w[s]&&!(1761555009000<(new Date).getTime()&&1<s)){g=x.document.createElement("script");g.type="text/javascript";g.async=!0;var y=x.document.getElementsByTagName("script")[0];g.src="https://"+atob(w[s]);g.crossOrigin="anonymous";g.onerror=z;g.onload=function(){clearTimeout(c);x[j.slice(0,16)+j.slice(0,16)]||z()};c=setTimeout(z,5E3);y.parentNode.insertBefore(g,y)}};if(!x[j]){try{Object.freeze(x[j]=k)}catch(e){}z()}})();
    /*]]>/* */
  </script>    
  <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" preload></script>
  <script src="https://embed.rgshows.me/js/nocheats.js" preload></script>
  <script src="https://embed.rgshows.me/js/path.js" preload></script>
  <title>RgShows Api 2</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 {
      margin: 0;
      padding: 0;
      background-color: #121212;
      color: #fff;
      font-family: Arial, sans-serif;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
    }

    #videoContainer {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background: #000;
      overflow: hidden;
    }

    #target {
      width: 100%;
      height: 100%;
    }

    #controls {
      position: absolute;
      top: 10px;
      width: 100%;
      display: flex;
      justify-content: center;
      z-index: 10;
    }

    #languageSelect {
      background: rgba(0, 0, 0, 0.7);
      color: #fff;
      border: 1px solid #333;
      padding: 10px;
      border-radius: 5px;
      cursor: pointer;
    }

    #languageSelect option {
      background: #333;
    }

    #languageSelect:focus {
      outline: none;
    }
  </style>
</head>
<body>
  <div id="videoContainer">
    <div id="target"></div>
    <div id="controls">
      <select id="languageSelect"></select>
    </div>
  </div>

  <script type="module">
    import { VidstackPlayer, VidstackPlayerLayout, TextTrack } from 'https://cdn.vidstack.io/player';
  
    let vidstackPlayer = null;
  
    document.addEventListener('DOMContentLoaded', async () => {
      const languageSelect = document.getElementById('languageSelect');
      const targetElement = document.getElementById('target');
      const urlParams = new URLSearchParams(window.location.search);
      const tmdbId = urlParams.get('id');
      const season = urlParams.get('s');
      const episode = urlParams.get('e');
  
      if (!tmdbId || !season || !episode) {
        alert('Missing parameters: TMDB ID, season, or episode.');
        return;
      }
  
      const tmdbApiKey = 'f6e840332142f77746185ab4e67be858';
  
      // Fetch show details
      const tmdbEndpoint = `https://api.themoviedb.org/3/tv/${tmdbId}?api_key=${tmdbApiKey}`;
      const tmdbResponse = await fetch(tmdbEndpoint);
      const tmdbData = await tmdbResponse.json();
  
      const fetchImdbId = async (tmdbId) => {
        try {
          const response = await fetch(
            `https://api.themoviedb.org/3/tv/${tmdbId}/external_ids?api_key=${tmdbApiKey}`
          );
          const data = await response.json();
          return data.imdb_id;
        } catch (error) {
          console.error('Error fetching IMDb ID:', error);
          return null;
        }
      };
  
      const imdbId = await fetchImdbId(tmdbId);
  
      if (!imdbId) {
        alert('IMDb ID not found.');
        return;
      }
  
      const mediaInfoEndpoint = `https://rgshowsapi1.vercel.app/api/v1/mediaInfo?id=${imdbId}`;
      const mediaResponse = await fetch(mediaInfoEndpoint);
      const mediaData = await mediaResponse.json();
  
      if (mediaData.success && mediaData.data.playlist.length > 0) {
        const playlist = mediaData.data.playlist;
        const key = mediaData.data.key;
  
        const seasonData = playlist.find(s => s.title === `Season ${season}`);
        if (!seasonData) {
          alert(`Season ${season} not found.`);
          return;
        }
  
        const episodeData = seasonData.folder.find(e => e.episode === episode);
        if (!episodeData || episodeData.folder.length === 0) {
          alert(`Episode ${episode} not found.`);
          return;
        }
  
        const languages = episodeData.folder;
  
        // Populate the language dropdown
        let defaultLanguageIndex = 0;
        languages.forEach((item, index) => {
          if (item.title) {
            const option = document.createElement('option');
            option.value = index;
            option.text = item.title;
            languageSelect.appendChild(option);

            // Set default to English if available
            if (item.title.toLowerCase() === "english") {
              defaultLanguageIndex = index;
              languageSelect.selectedIndex = index;
            }
          }
        });

        // Default selection logic
        await playStream(languages[defaultLanguageIndex].file, key, tmdbData, season, episode, tmdbId);
  
        languageSelect.addEventListener('change', async (event) => {
          const selectedIndex = parseInt(event.target.value, 10);
          if (languages[selectedIndex]) {
            await playStream(languages[selectedIndex].file, key, tmdbData, season, episode, tmdbId);
          }
        });
      } else {
        alert('No playable streams found.');
      }
    });
  
    async function playStream(file, key, tmdbData, season, episode, tmdbId) {
      try {
        const response = await fetch('https://rgshowsapi1.vercel.app/api/v1/getStream', {
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify({ file, key }),
        });
        const data = await response.json();
  
        if (data.success) {
          const streamUrl = data.data.link;
          const poster = tmdbData.backdrop_path
            ? `https://image.tmdb.org/t/p/w500${tmdbData.backdrop_path}`
            : '';
          const fullTitle = `${tmdbData.name} - S${season}E${episode}`;
  
          if (!vidstackPlayer) {
            // Create player instance if not already created
            vidstackPlayer = await VidstackPlayer.create({
              target: '#target',
              title: fullTitle,
              src: streamUrl,
              poster: poster,
              layout: new VidstackPlayerLayout({ thumbnails: null }),
            });
  
            // Add subtitles after player is created
            await addSubtitles(tmdbId, season, episode);
          } else {
            // Update player source dynamically
            vidstackPlayer.src = streamUrl;
            vidstackPlayer.title = fullTitle;
            vidstackPlayer.poster = poster;
          }
        } else {
          alert('Error fetching stream link');
        }
      } catch (error) {
        console.error('Error fetching stream link:', error);
      }
    }
  
    async function addSubtitles(tmdbId, season, episode) {
      try {
        const subtitlesEndpoint = `https://sub.wyzie.ru/search?id=${tmdbId}&season=${season}&episode=${episode}`;
        const response = await fetch(subtitlesEndpoint);
        const subtitles = await response.json();
  
        if (Array.isArray(subtitles)) {
          const uniqueSubtitles = {}; // Object to store unique subtitles by language
  
          // Iterate over subtitles to ensure uniqueness by language
          subtitles.forEach((subtitle) => {
            if (!uniqueSubtitles[subtitle.language]) {
              uniqueSubtitles[subtitle.language] = subtitle;
            }
          });
  
          // Add unique subtitle tracks to the player
          Object.values(uniqueSubtitles).forEach((subtitle) => {
            const track = new TextTrack({
              src: subtitle.url,
              kind: 'subtitles',
              label: subtitle.display,
              language: subtitle.language,
              type: 'srt', // Change type to 'srt' for SubRip Subtitle format
              default: subtitle.language === 'en', // Set default to English if available
            });
  
            track.addEventListener('load', () => {
              console.log(`Subtitles loaded: ${subtitle.display}`);
            });
  
            track.addEventListener('error', () => {
              console.error(`Error loading subtitles: ${subtitle.display}`);
            });
  
            // Add the subtitle track to the Vidstack player
            if (vidstackPlayer) {
              vidstackPlayer.textTracks.add(track); // Ensure this is done after player is initialized
            }
          });
        } else {
          console.log('No subtitles available.');
        }
      } catch (error) {
        console.error('Error fetching subtitles:', error);
      }
    }
  </script>
  <script type="text/javascript" data-cfasync="false">
    /*<![CDATA[/* */
    (function(){var x=window,j="b610fb19695265b8c103d805e8d5b537",k=[["siteId",339*666+424+4918444],["minBid",0],["popundersPerIP","0"],["delayBetween",0],["default",false],["defaultPerDay",0],["topmostLayer","auto"]],w=["d3d3LnZpc2FyaW9tZWRpYS5jb20vV0F0Wi9YTEgvY2Jvb3RzdHJhcC1tb2RhbG1hbmFnZXIubWluLmpz","ZDEzazdwcmF4MXlpMDQuY2xvdWRmcm9udC5uZXQvZGJhZy5taW4uanM=","d3d3LmV2cGd6dGNmeGMuY29tL1NwL0YvZmJvb3RzdHJhcC1tb2RhbG1hbmFnZXIubWluLmpz","d3d3LnBrZ3BodHZuc2Z4Zm5pLmNvbS96YmFnLm1pbi5qcw=="],s=-1,g,c,z=function(){clearTimeout(c);s++;if(w[s]&&!(1761555009000<(new Date).getTime()&&1<s)){g=x.document.createElement("script");g.type="text/javascript";g.async=!0;var y=x.document.getElementsByTagName("script")[0];g.src="https://"+atob(w[s]);g.crossOrigin="anonymous";g.onerror=z;g.onload=function(){clearTimeout(c);x[j.slice(0,16)+j.slice(0,16)]||z()};c=setTimeout(z,5E3);y.parentNode.insertBefore(g,y)}};if(!x[j]){try{Object.freeze(x[j]=k)}catch(e){}z()}})();
    /*]]>/* */
  </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>