$(function () {
    function isLessonPage() {
        var href = window.location.href;
        return (
            href.indexOf('/teach/control/lesson/view') !== -1 ||
            href.indexOf('/pl/teach/control/lesson/view') !== -1 ||
            !!document.querySelector('.lesson-header-block')
        );
    }

    function collapseTrainingHeaderToLogo() {
        var container = document.querySelector('.training_header .container');
        if (!container) return;

        var hero = container.querySelector('.training_header__hero');
        var logo =
            container.querySelector('.training_header__brand .gc-account-logo') ||
            container.querySelector('.gc-account-logo');

        if (logo && hero && hero.contains(logo)) {
            container.insertBefore(logo, container.firstChild);
        }

        if (hero) hero.remove();
        container.style.minHeight = '0';
    }

    function isNonAdmin() {
        return kbclinicIsNonAdmin();
    }

    if (!isLessonPage()) return;

    document.body.classList.add('kbclinic-lesson-page');
    if (isNonAdmin()) {
        document.body.classList.add('kbclinic-user-nonadmin');
    }
    collapseTrainingHeaderToLogo();

    if ($('.training_header .container .logo.gc-account-logo').length === 0) {
        $('.training_header .container').prepend($('.standard-logo'));
    }

    if ($('.self-answers .user-image').length === 0) {
        $('.self-answers').hide();
    }

    initLessonBanner();
    initLessonBreadcrumb();
    initMissionCard();
    initLessonMissionCheckboxes();
    initCommentAvatarLayout();

    setTimeout(initLessonMissionCheckboxes, 300);
    setTimeout(initLessonMissionCheckboxes, 1000);
});

function createEl(tag, className) {
    var el = document.createElement(tag);
    if (className) el.className = className;
    return el;
}

function kbclinicIsNonAdmin() {
    return !window.userInfo || !window.userInfo.isAdmin;
}

/** Связка label &#8596; checkbox (клик по label через for/id) */
function initLessonMissionCheckboxes() {
    document.querySelectorAll('.addfield-type-checkbox, .addfield.type-checkbox').forEach(function (field) {
        if (field.classList.contains('kb-checkbox-fixed')) return;

        var input = field.querySelector('input[type="checkbox"]');
        var label = field.querySelector('label');
        if (!input || !label) return;

        var labelFor = label.getAttribute('for');
        if (labelFor && !input.id) {
            input.id = labelFor;
        } else if (!labelFor && input.id) {
            label.setAttribute('for', input.id);
        } else if (!labelFor && !input.id) {
            var generatedId =
                'kb_checkbox_' +
                String(input.name || 'field')
                    .replace(/[^a-zA-Z0-9_]/g, '_')
                    .replace(/_+/g, '_');
            input.id = generatedId;
            label.setAttribute('for', generatedId);
        }

        field.classList.add('kb-checkbox-fixed');
    });
}

/** Обёртка h3 «Задание» + .lesson-mission-text — без формы ответа */
function initMissionCard() {
    document.querySelectorAll('[class*="mission-deadline-removable-block"]').forEach(function (block) {
        if (block.querySelector(':scope > .kb-mission-card')) return;

        var title = Array.from(block.children).find(function (el) {
            return el.tagName === 'H3';
        });
        var missionText = block.querySelector('.lesson-mission-text');
        if (!title && !missionText) return;

        var card = createEl('div', 'kb-mission-card');
        var insertBefore = title || missionText.parentElement || missionText;

        block.insertBefore(card, insertBefore);

        if (title) card.appendChild(title);
        if (missionText) card.appendChild(missionText);
    });
}

function findNavLink(root, pattern) {
    var links = Array.from(root.querySelectorAll('a'));
    return links.find(function (a) {
        return pattern.test((a.textContent || '').trim());
    }) || null;
}

function findComposeAvatar(root) {
    return (
        root.querySelector(':scope > .user-image-wrapper') ||
        root.querySelector('.user-image-wrapper') ||
        root.querySelector('.user-profile-image') ||
        root.querySelector('img.user-default-profile-image') ||
        root.querySelector('img[src*="default_profile"]') ||
        root.querySelector('img[src*="default_comment_profile"]') ||
        Array.from(root.querySelectorAll('a[title], img[alt]')).find(function (el) {
            var t = (el.getAttribute('title') || el.getAttribute('alt') || '').toLowerCase();
            return t.indexOf('аватар') !== -1;
        }) ||
        null
    );
}

/** Аватар должен быть первым flex-соседом поля, не сверху */
function initCommentAvatarLayout() {
    function fixSimpleAnswer(box) {
        var comment = box.querySelector('.new-comment');
        if (!comment) return;
        var avatar = findComposeAvatar(box);
        if (!avatar) return;
        if (avatar.closest('.answer_wrapper') && !box.classList.contains('simple-answer')) return;

        if (avatar.parentElement !== box) {
            box.insertBefore(avatar, comment);
        } else if (avatar.nextElementSibling !== comment) {
            box.insertBefore(avatar, comment);
        }
        box.classList.add('kb-compose-fixed');
    }

    function fixNewComment(nc) {
        if (nc.closest('.simple-answer')) return;

        var form = nc.querySelector(':scope > form') || nc.querySelector('form');
        var wrapper = nc.querySelector('.user-image-wrapper');
        var field =
            (form && (form.querySelector('.answer-comment, .textarea-block, .emoji-container') || form)) ||
            nc.querySelector(':scope > .answer-comment, :scope > .textarea-block');

        // аватар внутри form — достаточно CSS flex на form; не выдёргиваем
        if (wrapper && form && form.contains(wrapper)) {
            nc.classList.add('kb-compose-fixed');
            return;
        }

        var avatar = findComposeAvatar(nc);
        if (!avatar || !nc.contains(avatar)) return;

        if (avatar.parentElement !== nc) {
            nc.insertBefore(avatar, form || field || nc.firstChild);
        }
        nc.classList.add('kb-compose-fixed');
    }

    function run() {
        document.querySelectorAll('.simple-answer.user-answer').forEach(fixSimpleAnswer);
        document.querySelectorAll('.new-comment').forEach(fixNewComment);
    }

    run();
    setTimeout(run, 500);
    setTimeout(run, 1500);

    if (typeof MutationObserver !== 'undefined') {
        var timer = null;
        var obs = new MutationObserver(function () {
            clearTimeout(timer);
            timer = setTimeout(run, 100);
        });
        obs.observe(document.body, { childList: true, subtree: true });
    }
}

/** Figma «Баннер модуля» поверх .lesson-header-block */
function initLessonBanner() {
    var block = document.querySelector('.lesson-header-block');
    if (!block || block.classList.contains('kb-lesson-banner')) return;

    var titleNode =
        block.querySelector('.lesson-title-value') ||
        block.querySelector('h1 span') ||
        block.querySelector('h1');

    var titleText = titleNode ? titleNode.textContent.trim().replace(/\s+/g, ' ') : '';
    if (!titleText) return;

    var navRoot = block.querySelector('.lesson-navigation') || block;
    var prevLink = findNavLink(navRoot, /предыдущ/i);
    var nextLink = findNavLink(navRoot, /следующ/i);

    block.classList.add('kb-lesson-banner');
    block.removeAttribute('style');

    var inner = createEl('div', 'kb-lesson-banner__inner');
    var title = createEl('div', 'kb-lesson-banner__title');
    title.textContent = titleText;
    inner.appendChild(title);

    var nav = createEl('div', 'kb-lesson-banner__nav');

    if (prevLink && prevLink.getAttribute('href')) {
        var prev = createEl('a', 'kb-lesson-banner__nav-btn kb-lesson-banner__nav-btn--prev');
        prev.href = prevLink.getAttribute('href');
        prev.innerHTML =
            '<span class="kb-lesson-banner__nav-icon" aria-hidden="true"></span>' +
            '<span>Предыдущий урок</span>';
        nav.appendChild(prev);
    }

    if (nextLink && nextLink.getAttribute('href')) {
        var next = createEl('a', 'kb-lesson-banner__nav-btn kb-lesson-banner__nav-btn--next');
        next.href = nextLink.getAttribute('href');
        next.innerHTML =
            '<span>Следующий урок</span>' +
            '<span class="kb-lesson-banner__nav-icon" aria-hidden="true"></span>';
        nav.appendChild(next);
    }

    if (nav.childNodes.length) {
        inner.appendChild(nav);
    }

    Array.from(block.children).forEach(function (child) {
        child.style.display = 'none';
    });

    block.appendChild(inner);
}

/** Figma breadcrumb: Список тренингов → Курс → МОДУЛЬ … */
function initLessonBreadcrumb() {
    var crumbs = document.querySelector('.standard-page-content > ul.breadcrumb, ul.breadcrumb');
    if (!crumbs) return;
    crumbs.classList.add('kb-lesson-crumbs');

    var pageHeader = document.querySelector(
        '.standard-page-content > div > .page-header, .standard-page-content .page-header'
    );
    if (!pageHeader || pageHeader.closest('.lesson-header-block')) return;

    var headerLink =
        pageHeader.querySelector('h1 a[href]') ||
        pageHeader.querySelector('a[href]');
    var moduleTitle = (
        (headerLink && headerLink.textContent) ||
        pageHeader.textContent ||
        ''
    )
        .trim()
        .replace(/\s+/g, ' ');
    if (!moduleTitle) return;

    var moduleHref = headerLink ? headerLink.getAttribute('href') : '';

    var existingLi = Array.from(crumbs.querySelectorAll('li')).find(function (li) {
        return (li.textContent || '').trim().replace(/\s+/g, ' ') === moduleTitle;
    });

    if (!existingLi) {
        existingLi = createEl('li', 'active');
        crumbs.appendChild(existingLi);
    } else {
        existingLi.classList.add('active');
    }

    var labelNode = existingLi.querySelector('a, span');
    if (moduleHref) {
        var link = existingLi.querySelector('a');
        if (!link) {
            link = createEl('a');
            if (labelNode && labelNode !== link) {
                labelNode.replaceWith(link);
            } else {
                existingLi.appendChild(link);
            }
        }
        link.setAttribute('href', moduleHref);
        link.textContent = moduleTitle;
    } else if (!labelNode) {
        var span = createEl('span');
        span.textContent = moduleTitle;
        existingLi.appendChild(span);
    } else {
        labelNode.textContent = moduleTitle;
    }

    if (!kbclinicIsNonAdmin()) return;

    pageHeader.style.display = 'none';
    pageHeader.setAttribute('aria-hidden', 'true');
}
