<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
?>

<?php if ($is_admin == 'super') {  ?><!-- <div style='float:left; text-align:center;'>RUN TIME : <?php echo get_microtime()-$begin_time; ?><br></div> --><?php }  ?>

<!-- ie6,7에서 사이드뷰가 게시판 목록에서 아래 사이드뷰에 가려지는 현상 수정 -->
<!--[if lte IE 7]>
<script>
$(function() {
    var $sv_use = $(".sv_use");
    var count = $sv_use.length;

    $sv_use.each(function() {
        $(this).css("z-index", count);
        $(this).css("position", "relative");
        count = count - 1;
    });
});
</script>
<![endif]-->

<?php run_event('tail_sub'); ?>

<?php
// 차단된 페이지 목록
$restricted_pages = ['index.php', 'search.php'];

$current_page = basename($_SERVER['PHP_SELF']);

// 현재 파일이 차단된 페이지 목록에 있는지 확인
if (!in_array($current_page, $restricted_pages)) {
    ?>
<!-- @ 태그 발견 시 프로필 링크처리{ -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    var currentPage = window.location.pathname;
    var blockedPages = [
        '<?php echo G5_BBS_URL ?>/member_profile.php',
        '<?php echo G5_BBS_URL ?>/profile.php'
    ];
    if (blockedPages.includes(currentPage)) {
        return;
    }

    // 정규 표현식 수정: @ 앞에 공백이 없을 경우 매치하지 않도록 설정
    var regex = /(?<!\S)@(\w+)/g; 
    var textNodes = document.evaluate(
        "//text()",
        document,
        null,
        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
        null
    );

    for (var i = 0; i < textNodes.snapshotLength; i++) {
        var node = textNodes.snapshotItem(i);

        // textarea 내부의 텍스트 노드는 처리하지 않음
        if (node.parentNode.tagName.toLowerCase() === 'textarea') {
            continue;
        }

        var text = node.nodeValue;
        var newText = text.replace(regex, function(match, id) {
            var url = '<?php echo G5_BBS_URL ?>/profile.php?mb_id=' + id;
            return '<a href="' + url + '" class="mansion" style="text-decoration-line: none;color:#2497ff;">@' + id + '</a>';
        });

        if (newText !== text) {
            var newNode = document.createElement('span');
            newNode.innerHTML = newText;
            node.parentNode.replaceChild(newNode, node);
        }
    }
});
</script>
<!-- # 검색 태그 발견 시 검색 링크처리{ -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    var regex = /(?<!\S)#([\w가-힣]+)/g; // 앞에 공백이 없을 때만 매치하도록 수정
    var textNodesIterator = document.evaluate(
        "//text()",
        document,
        null,
        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
        null
    );
    
    for (var i = 0; i < textNodesIterator.snapshotLength; i++) {
        var textNode = textNodesIterator.snapshotItem(i);

        // textarea 내부의 텍스트 노드는 처리하지 않음
        if (textNode.parentNode.tagName.toLowerCase() === 'textarea') {
            continue;
        }

        var originalText = textNode.nodeValue;
        var modifiedText = originalText.replace(regex, function(match, title) {
            if (textNode.parentNode.tagName.toLowerCase() === 'a' || 
                textNode.parentNode.tagName.toLowerCase() === 'style' || 
                textNode.parentNode.tagName.toLowerCase() === 'id') {
                return match;
            } else {
                var searchUrl = '<?php echo G5_BBS_URL ?>/search.php?sfl=wr_subject%7C%7Cwr_content%7C%7Cmb_id%7C%7Cwr_name%7C%7Cwr_datetime%7C%7Cwr_last%7C%7Cwr_ip&sop=and&stx=' + encodeURIComponent(title);
                return '<a href="' + searchUrl + '" class="search_tag" style="text-decoration-line: none;color:#ee8438;">#' + title + '</a>';
            }
        });

        if (modifiedText !== originalText) {
            var newNode = document.createElement('span');
            newNode.innerHTML = modifiedText;
            textNode.parentNode.replaceChild(newNode, textNode);
        }
    }
});
</script>
<?php } ?>

<?php
// 차단된 페이지 목록
$restricted_pages = ['index.php', 'search.php'];

$current_page = basename($_SERVER['PHP_SELF']);

// 현재 파일이 차단된 페이지 목록에 있는지 확인
if (!in_array($current_page, $restricted_pages)) {
    ?>

<!-- 멘션 시스템{ -->
<script>
    document.addEventListener('DOMContentLoaded', function() {
        var pageHTML = document.documentElement.innerHTML;
        var regex = /@(\w+)/g;
        var matches = pageHTML.match(regex);

        if (matches) {
            matches.forEach(function(match) {
                var memberId = match.slice(1);

                if (memberId) {
                    var refererUrl = window.location.href;
                    sendMentionMemoToPHP(memberId, refererUrl);
                }
            });
        }
    });

    function sendMentionMemoToPHP(memberId, refererUrl) {
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "<?php echo G5_BBS_URL; ?>/alarm.php", true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log("Memo sent to member: " + memberId);
            }
        };
        xhr.send("member_id=" + memberId + "&referer_url=" + encodeURIComponent(refererUrl));
    }
</script>
<?php } ?>

<!-- 댓글 알람{ -->
<?php
function get_member_id_from_view($view) {
    // $view['name']에서 회원 아이디 추출
    $mb_id = isset($view['mb_id']) ? $view['mb_id'] : null;

    if ($mb_id) {
        return $mb_id; // 회원 아이디 반환
    } else {
        return null; // 회원 아이디가 없을 경우 null 반환
    }
}
?>
<script>
document.addEventListener("DOMContentLoaded", function() {
    const section = document.querySelector("#bo_vc");
    if (section) {
        const articles = section.querySelectorAll("article[id^='c_']");
        articles.forEach(article => {
            const link = article.querySelector("span.sv_wrap a.sv_member");
            const recvMbId = "<?php echo get_member_id_from_view($view); ?>"; // PHP로부터 받는 아이디

            // 댓글 작성 시간 추출
            const timeElement = article.querySelector("time[datetime]");
            if (timeElement) {
                const commentTime = new Date(timeElement.getAttribute("datetime"));
                const currentTime = new Date();
                const timeDifference = (currentTime - commentTime) / (1000 * 60); // 시간 차이를 분 단위로 계산

                // 댓글 작성 시간이 5분 이내인 경우에만 POST 요청
                if (timeDifference <= 5) {
                    const commentAuthorId = link ? '@' + link.href.split('mb_id=')[1] : '비회원';
                    
                    // URL에서 #과 그 뒤의 텍스트 제거
                    let cleanUrl = window.location.href.split('#')[0];

                    fetch("<?php echo G5_BBS_URL ?>/alarm_comment.php", {
                        method: "POST",
                        headers: {
                            "Content-Type": "application/x-www-form-urlencoded"
                        },
                        body: new URLSearchParams({
                            member_id: recvMbId,
                            referer_url: cleanUrl, // '#' 제거된 URL 전송
                            comment_author_id: commentAuthorId
                        })
                    })
                    .then(response => response.text())
                    .then(data => {
                        console.log(data); // 서버에서 받은 응답 처리
                    })
                    .catch(error => {
                        console.error("쪽지 전송 실패:", error);
                    });
                }
            }
        });
    }
});
</script>

</body>
</html>
<?php echo html_end(); // HTML 마지막 처리 함수 : 반드시 넣어주시기 바랍니다. ?>
