// ==UserScript==
// @name         CHZZK Ad Blocker
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  광고를 빠르게 넘기기 위해 비디오 재생 속도를 최대한 빠르게 설정합니다
// @author       krkarma777
// @match        https://chzzk.naver.com/*
// @icon         https://ssl.pstatic.net/static/nng/glive/icon/favicon.png
// @updateURL    https://raw.githubusercontent.com/krkarma777/UltraFastAdSkipperFromCHZZK/main/CHZZK-Ad-Blocker.user.js
// @downloadURL  https://raw.githubusercontent.com/krkarma777/UltraFastAdSkipperFromCHZZK/main/CHZZK-Ad-Blocker.user.js
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 광고 비디오를 식별하기 위한 URL 패턴 목록
    const adVideoPatterns = [
        "*://*tvetamovie.pstatic.net/*",
        "*://*glad-vod.pstatic.net/*"
    ];

    // 와일드카드 패턴을 정규 표현식으로 변환
    const adVideoUrls = adVideoPatterns.map(pattern => new RegExp(pattern.replace(/\*/g, '.*').replace(/\./g, '\\.')));

    // URL이 광고 비디오인지 확인
    function isAdVideo(url) {
        return adVideoUrls.some(regex => regex.test(url));
    }

    // 비디오를 빠르게 진행하기 위해 currentTime을 증가시키는 함수
    function fastForwardVideo(video) {
        if (video && !video.dataset.adSkipperProcessed) {
            video.dataset.adSkipperProcessed = true;
            console.log(`비디오를 빠르게 진행 중: ${video.src}`);
            const interval = setInterval(() => {
                if (video.currentTime < video.duration) {
                    video.currentTime += 10.0; // 이 값을 증가시켜 더 빨리 넘기기
                } else {
                    clearInterval(interval);
                }
            }, 10); // currentTime 업데이트 빈도를 증가시켜 더 빨리 넘기기
        }
    }

    // 비디오 요소에 이벤트 리스너를 추가하는 함수
    function addVideoEventListeners(video) {
        video.addEventListener('loadedmetadata', () => {
            if (isAdVideo(video.src)) {
                fastForwardVideo(video);
            }
        });
    }

    // MutationObserver를 설정하여 새로운 비디오 요소를 감지하고 처리
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            mutation.addedNodes.forEach(node => {
                if (node.nodeType === 1 && node.tagName === 'VIDEO') {
                    addVideoEventListeners(node);
                } else if (node.nodeType === 1) {
                    node.querySelectorAll('video').forEach(addVideoEventListeners);
                }
            });
        });
    });

    observer.observe(document.documentElement, { childList: true, subtree: true });

    // 페이지 로드 시 비디오 요소 초기 스캔
    document.addEventListener('DOMContentLoaded', () => {
        document.querySelectorAll('video').forEach(addVideoEventListeners);
    });

    console.log("CHZZK Ad Blocker 스크립트가 실행 중입니다.");
})();