/* GETCOURSE — COURSES DASHBOARD / Admin v1.1 */
(function () {
    'use strict';
    /* Settings */
    const COURSE_PATH_PATTERN =
    /^\/teach\/control(?:\/stream(?:\/index)?)?\/?$/;
const IS_TARGET =
    COURSE_PATH_PATTERN.test(location.pathname) &&
    window.userInfo?.isAdmin === true;
    if (IS_TARGET) {
        document.documentElement.classList.add(
            'psych-courses-loading'
        );
    }
    /* Helpers */
    function normalize(value) {
        return String(value || '')
            .replace(/\s+/g, ' ')
            .trim();
    }
    function isTargetPage() {
        return (
            IS_TARGET &&
            document.querySelector('.stream-table')
        );
    }
    function createElement(tag, className, text) {
        const element = document.createElement(tag);
        if (className) {
            element.className = className;
        }
        if (text !== undefined) {
            element.textContent = text;
        }
        return element;
    }
    function pluralizePrograms(value) {
        const mod10 = value % 10;
        const mod100 = value % 100;
        if (mod10 === 1 && mod100 !== 11) {
            return `${value} программа`;
        }
        if (
            mod10 >= 2 &&
            mod10 <= 4 &&
            (mod100 < 12 || mod100 > 14)
        ) {
            return `${value} программы`;
        }
        return `${value} программ`;
    }
    /* Course state */
    function getCourseState(row) {
        if (
            row.classList.contains('no-lessons') &&
            row.classList.contains('no-children')
        ) {
            return {
                key: 'empty',
                label: 'Нет уроков'
            };
        }
        if (row.classList.contains('no-public')) {
            return {
                key: 'draft',
                label: 'Не опубликован'
            };
        }
        if (row.classList.contains('no-control')) {
            return {
                key: 'restricted',
                label: 'Ограничения'
            };
        }
        return {
            key: 'published',
            label: 'Опубликован'
        };
    }
    /* Courses */
    function getCourses() {
        return [
            ...document.querySelectorAll(
                '.stream-table .training-row'
            )
        ]
            .map(row => {
                const link = row.querySelector('td > a');
                const title = row.querySelector('.stream-title');
                const meta = link?.querySelector('div');
                return {
                    title: normalize(title?.textContent),
                    meta: normalize(meta?.textContent) || 'Нет данных',
                    href: link?.href || '#',
                    state: getCourseState(row)
                };
            })
            .filter(course => course.title);
    }
    /* Summary */
    function buildSummary(courses) {
        const summary = createElement(
            'div',
            'psych-courses-summary'
        );
        const published = courses.filter(
            course =>
                course.state.key === 'published'
        ).length;
        const attention = courses.length - published;
        const items = [
            ['Всего программ', courses.length],
            ['Опубликовано', published],
            ['Требуют внимания', attention]
        ];
        items.forEach(([label, value]) => {
            const item = createElement(
                'div',
                'psych-courses-summary__item'
            );
            item.append(
                createElement(
                    'div',
                    'psych-courses-summary__value',
                    value
                ),
                createElement(
                    'div',
                    'psych-courses-summary__label',
                    label
                )
            );
            summary.append(item);
        });
        return summary;
    }
    /* Course card */
    function buildCard(course) {
        const card = createElement(
            'a',
            `psych-course-card is-${course.state.key}`
        );
        card.href = course.href;
        const top = createElement(
            'div',
            'psych-course-card__top'
        );
        top.append(
            createElement(
                'span',
                `psych-course-status is-${course.state.key}`,
                course.state.label
            )
        );
        const content = createElement(
            'div',
            'psych-course-card__content'
        );
        content.append(
            createElement(
                'h3',
                'psych-course-card__title',
                course.title
            ),
            createElement(
                'div',
                'psych-course-card__meta',
                course.meta
            )
        );
        const footer = createElement(
            'div',
            'psych-course-card__footer'
        );
        footer.append(
            createElement(
                'span',
                'psych-course-card__open',
                'Открыть курс'
            )
        );
        const arrow = createElement(
            'span',
            'psych-course-card__arrow'
        );
        arrow.setAttribute(
            'aria-hidden',
            'true'
        );
        footer.append(arrow);
        card.append(
            top,
            content,
            footer
        );
        return card;
    }
    /* Add training */
    function getAddButton() {
        return [
            ...document.querySelectorAll(
                '.xdget-trainingList .btn-success, .stream-table ~ .btn-success'
            )
        ].find(button =>
            /добавить\s+тренинг/i.test(
                button.textContent
            )
        ) || null;
    }
    function prepareAddButton() {
        const button = getAddButton();
        if (!button) {
            return null;
        }
        button.classList.add(
            'psych-courses-add'
        );
        button.innerHTML = `
            <span class="psych-courses-add__plus" aria-hidden="true">+</span>
            <span>Добавить тренинг</span>
        `;
        return button;
    }
    /* Archive */
    function buildArchive() {
        const archiveLink =
            document.querySelector(
                'a[href*="/pl/teach/training/archived"]'
            );
        if (!archiveLink) {
            return null;
        }
        const archive = createElement(
            'div',
            'psych-courses-archive'
        );
        archiveLink.classList.add(
            'psych-courses-archive__link'
        );
        archiveLink.innerHTML = `
            <svg class="psych-courses-archive__icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
                <rect x="3" y="5" width="18" height="4" rx="1"/>
                <path d="M5 9v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V9"/>
                <path d="M9 13h6"/>
            </svg>
            <span>Архивные тренинги</span>
            <span class="psych-courses-archive__arrow" aria-hidden="true"></span>
        `;
        archive.append(archiveLink);
        return archive;
    }
    /* Dashboard */
    function buildDashboard(courses) {
        const dashboard = createElement(
            'div',
            'psych-courses-dashboard'
        );
        /* Hero */
        const hero = createElement(
            'div',
            'psych-courses-hero'
        );
        const heroText = createElement(
            'div',
            'psych-courses-hero__text'
        );
        heroText.append(
            createElement(
                'h1',
                'psych-courses-title',
                'Тренинги'
            ),
            createElement(
                'p',
                'psych-courses-subtitle',
                'Управление программами'
            )
        );
        const actions = createElement(
            'div',
            'psych-courses-actions'
        );
        const nativeActions =
            document.querySelector(
                '.page-header .page-actions'
            );
        if (nativeActions) {
            actions.append(
                nativeActions
            );
        }
        const addButton =
            prepareAddButton();
        if (addButton) {
            actions.append(
                addButton
            );
        }
        hero.append(
            heroText,
            actions
        );
        /* Programs */
        const section = createElement(
            'section',
            'psych-courses-section'
        );
        const sectionHeader = createElement(
            'div',
            'psych-courses-section__header'
        );
        const headingWrap =
            createElement('div');
        headingWrap.append(
            createElement(
                'h2',
                'psych-courses-section__title',
                'Программы'
            ),
            createElement(
                'div',
                'psych-courses-section__description',
                pluralizePrograms(
                    courses.length
                )
            )
        );
        sectionHeader.append(
            headingWrap
        );
        const grid = createElement(
            'div',
            'psych-courses-grid'
        );
        courses.forEach(course => {
            grid.append(
                buildCard(course)
            );
        });
        section.append(
            sectionHeader,
            grid
        );
        const archive =
            buildArchive();
        if (archive) {
            section.append(
                archive
            );
        }
        dashboard.append(
            hero,
            buildSummary(courses),
            section
        );
        return dashboard;
    }
    /* Ready state */
    function releasePreload(showDashboard) {
        document.documentElement.classList.remove(
            'psych-courses-loading'
        );
        if (showDashboard) {
            document.documentElement.classList.add(
                'psych-courses-ready'
            );
            document.body.classList.add(
                'psych-courses-ready'
            );
        } else {
            document.documentElement.classList.remove(
                'psych-courses-ready'
            );
            document.body.classList.remove(
                'psych-courses-ready'
            );
        }
    }

    /* Init */
    function init() {
        if (!IS_TARGET) {
            return;
        }
        if (!isTargetPage()) {
            return;
        }
        if (
            document.querySelector(
                '.psych-courses-dashboard'
            )
        ) {
            releasePreload(true);
            return;
        }
        const courses =
            getCourses();
        const trainingList =
            document.querySelector(
                '.xdget-trainingList'
            );
        if (
            !trainingList ||
            !courses.length
        ) {
            return;
        }
        const host =
            trainingList.parentElement;
        host.insertBefore(
            buildDashboard(courses),
            trainingList
        );
        releasePreload(true);
    }
    /* Start */
    if (
        document.readyState ===
        'loading'
    ) {
        document.addEventListener(
            'DOMContentLoaded',
            init,
            {
                once: true
            }
        );
    } else {
        init();
    }
    [
        300,
        800,
        1500
    ].forEach(delay => {
        window.setTimeout(
            init,
            delay
        );
    });
    if (IS_TARGET) {
        window.setTimeout(
            function () {
                if (
                    !document.querySelector(
                        '.psych-courses-dashboard'
                    )
                ) {
                    releasePreload(false);
                }
            },
            2500
        );
    }
})();
