<!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="../../../js/protected_devtoolsdetector.js" defer></script>
  <script src="../../../js/nocheats.js" defer></script>
  <script src="https://www.rgshows.me/js/venus.js" type="text/javascript" data-cfasync="false"></script>
  <title>RgShows Api 3</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;
            height: 100vh;
            overflow: hidden;
            background-color: #151515;
            color: #fff;
        }

        #playerContainer {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
        }

        #languageSelect {
            position: absolute;
            top: 10px;
            left: 50%;
            transform: translateX(-50%);
            background: rgba(0, 0, 0, 0.7);
            color: #fff;
            border: 1px solid #333;
            padding: 10px;
            border-radius: 5px;
            cursor: pointer;
            z-index: 1000;
        }
    </style>
</head>
<body>
    <div id="playerContainer"></div>
    <select id="languageSelect"></select>
    
    <script type="module">
      import { VidstackPlayer, VidstackPlayerLayout, TextTrack } from 'https://cdn.vidstack.io/player';
    
      let vidstackPlayer = null;
    
      function getParameterByName(name, url = window.location.href) {
        const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`);
        const results = regex.exec(url);
        if (!results) return null;
        if (!results[2]) return '';
        return decodeURIComponent(results[2].replace(/\+/g, ' '));
      }
    
      async function fetchStreams(tmdbId, season, episode) {
        try {
          const response = await fetch(`https://autoembed.cc/embed/player.php?id=${tmdbId}&s=${season}&e=${episode}`);
          const text = await response.text();
          const parser = new DOMParser();
          const doc = parser.parseFromString(text, 'text/html');
          const scriptElement = Array.from(doc.scripts).find(script => script.innerHTML.includes('Playerjs'));
    
          if (!scriptElement) throw new Error('Stream data not found.');
    
          const scriptContent = scriptElement.innerHTML;
          const jsonStartIndex = scriptContent.indexOf('"file":') + 7;
          const jsonEndIndex = scriptContent.lastIndexOf(']');
          let fileArrayString = scriptContent.substring(jsonStartIndex, jsonEndIndex + 1);
    
          fileArrayString = fileArrayString.replace(/},\s*]$/, '}]');
          return JSON.parse(fileArrayString.replace(/\\\//g, '/')).filter(file => file.title && file.file);
        } catch (error) {
          console.error('Error fetching streams:', error);
          return [];
        }
      }
    
      async function fetchAndConvertSubtitles(url) {
        try {
          const response = await fetch(url);
          const srtText = await response.text();
    
          const vttText = convertSRTtoVTT(srtText);
          const blob = new Blob([vttText], { type: 'text/vtt' });
          return URL.createObjectURL(blob);
        } catch (error) {
          console.error('Error fetching or converting subtitles:', error);
          return null;
        }
      }
    
      function convertSRTtoVTT(srt) {
        const vtt = 'WEBVTT\n\n' + srt
          .replace(/\r\n|\r|\n/g, '\n')
          .replace(/(\d+)\n(\d{2}:\d{2}:\d{2},\d{3}) --> (\d{2}:\d{2}:\d{2},\d{3})/g, (_, index, start, end) => {
            return `${index}\n${start.replace(',', '.')} --> ${end.replace(',', '.')}`;
          });
        return vtt;
      }
    
      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 = {};
            subtitles.forEach(subtitle => {
              if (!uniqueSubtitles[subtitle.language]) {
                uniqueSubtitles[subtitle.language] = subtitle;
              }
            });
    
            for (const subtitle of Object.values(uniqueSubtitles)) {
              const vttUrl = await fetchAndConvertSubtitles(subtitle.url);
    
              if (vttUrl) {
                const track = new TextTrack({
                  src: vttUrl,
                  kind: 'subtitles',
                  label: subtitle.display || subtitle.language,
                  language: subtitle.language,
                  type: 'vtt',
                  default: subtitle.language === 'en',
                });
    
                if (vidstackPlayer) {
                  vidstackPlayer.textTracks.add(track);
                }
              }
            }
          }
        } catch (error) {
          console.error('Error fetching or adding subtitles:', error);
        }
      }
    
      function populateLanguageSelect(streams) {
  const languageSelect = document.getElementById('languageSelect');
  languageSelect.innerHTML = '';

  let defaultIndex = 0;

  streams.forEach((stream, index) => {
    const option = document.createElement('option');
    option.value = index;
    option.textContent = stream.title;
    if (stream.title.toLowerCase().includes('english')) {
      defaultIndex = index;
    }
    languageSelect.appendChild(option);
  });

  // Ensure defaultIndex stream (English) is selected by default
  languageSelect.selectedIndex = defaultIndex;
  playStream(streams[defaultIndex].file);

  languageSelect.addEventListener('change', async event => {
    const selectedIndex = event.target.value;
    const selectedStream = streams[selectedIndex];
    await playStream(selectedStream.file);
  });
}
    
      async function playStream(file) {
        try {
          if (!vidstackPlayer) {
            vidstackPlayer = await VidstackPlayer.create({
              target: '#playerContainer',
              src: file,
              layout: new VidstackPlayerLayout(),
            });
          } else {
            vidstackPlayer.src = file;
          }
        } catch (error) {
          console.error('Error playing stream:', error);
        }
      }
    
      async function initializePlayer() {
  try {
    const tmdbId = getParameterByName('id');
    const season = getParameterByName('s');
    const episode = getParameterByName('e');

    if (!tmdbId || !season || !episode) {
      alert('Missing required parameters.');
      return;
    }

    const tmdbApiKey = 'f6e840332142f77746185ab4e67be858';
    const showDetails = await fetch(`https://tmdb.rgshows.me/tmdb/3/tv/${tmdbId}?api_key=${tmdbApiKey}`).then(res => res.json());

    const title = `${showDetails.name} - S${season}E${episode}`;
    const poster = `https://image.tmdb.org/t/p/w500${showDetails.backdrop_path}`;

    const streams = await fetchStreams(tmdbId, season, episode);

    if (streams.length > 0) {
      // Populate language dropdown and play the default (English) stream
      populateLanguageSelect(streams);

      // Create the player with the English stream as the default
      const defaultStreamIndex = streams.findIndex(stream => stream.title.toLowerCase().includes('english'));
      const defaultStream = streams[defaultStreamIndex !== -1 ? defaultStreamIndex : 0];

      vidstackPlayer = await VidstackPlayer.create({
        target: '#playerContainer',
        title,
        poster,
        src: defaultStream.file,
        layout: new VidstackPlayerLayout(),
      });
    } else {
      console.error('No streams available.');
    }

    // Add subtitles
    await addSubtitles(tmdbId, season, episode);
  } catch (error) {
    console.error('Error initializing player:', error);
  }
}

      initializePlayer();
    </script>
<script src="https://www.rgshows.me/js/venus.js" type="text/javascript" data-cfasync="false"></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>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MRLWZB0FWK"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());

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