(function($) {
  // --- helpers / state ---
  function delay(callback, ms) {
    var timer = 0;
    return function() {
      var context = this, args = arguments;
      clearTimeout(timer);
      timer = setTimeout(function () {
        callback.apply(context, args);
      }, ms || 0);
    };
  }

  $.create = function(tag,id) {
    const elm = document.createElement(tag.toUpperCase());
    if (typeof(id) != "undefined") elm.id = id;
    return $(elm);
  };

  var SEARCH_INITED = false;

  // --- вставка блока поиска ---
  function insertSearchBlock() {
    if (!window.location.pathname.includes("/teach/control/stream")) return;
    if (document.querySelector(".search_wrapper")) return;

    var searchWrapper = document.createElement("div");
    searchWrapper.className = "search_wrapper";
    searchWrapper.innerHTML = '\
      <div class="new_logo">\
        <a href="/"><img src="//fs-thb01.getcourse.ru/fileservice/file/thumbnail/h/050ce16656d49abdb82b2c14627764a1.png/s/x50/a/465395/sc/87"></a>\
      </div>\
      <div class="SearchBlock">\
        <input id="SearchInput" type="text" placeholder="Введите название тренинга или урока" class="TextInput SearchBlock__input __left-icon">\
        <div class="SearchBlock__clear">\
          <svg width="12" height="12" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 24 24"><path d="M12 11.293l10.293-10.293.707.707-10.293 10.293 10.293 10.293-.707.707-10.293-10.293-10.293 10.293-.707-.707 10.293-10.293-10.293-10.293.707-.707 10.293 10.293z"></path></svg>\
        </div>\
        <div class="SearchBlock__left-icon"><i class="fa fa-search"></i></div>\
      </div>\
      <a href="https://t.me/fizikleducationteam"><div class="tech_btn">Написать в поддержку</div></a>';

    var topWrapper = document.querySelector('.top_wrapper');
    if (topWrapper) {
      topWrapper.insertBefore(searchWrapper, topWrapper.firstChild);
    } else {
      var newTop = document.createElement('div');
      newTop.className = 'top_wrapper';
      newTop.appendChild(searchWrapper);

      var targetContainer = document.querySelector('.main-page-block');
      if (targetContainer) {
        targetContainer.insertBefore(newTop, targetContainer.firstChild);
      } else {
        document.body.insertBefore(newTop, document.body.firstChild);
      }
    }
  }

  // --- инициализация поиска ---
  function initSearch() {
    if (!window.location.pathname.includes("/teach/control/stream")) return;
    if (SEARCH_INITED) return;
    SEARCH_INITED = true;

    $(document).on('keyup', '#SearchInput', delay(function () {
      var $input = $(this);
      if ($input.val().length <= 1) return;

      $('.SearchBlock__left-icon .fa').removeClass('fa-search').addClass('fa-spinner fa-spin');
      $('.BlockList').fadeOut(200, function(){ $(this).remove(); });

      $.getJSON('https://'+window.location.hostname+'/c/sa/search', { 
        searchStr: $input.val(), 
        ccc: Date.now() 
      }).done(function(json){
        if(json.success) {
          var BlockList = $.create('div').addClass('BlockList');
          $.each(json.data.blocks, function(i, block){
            var BlockList_Row = $.create('div');
            if(typeof block.text != "undefined") 
              BlockList_Row.addClass('TextBlock').html(block.text);
            if(typeof block.url != "undefined") {
              BlockList_Row.addClass('ScreenBlock __large __clickable').append(
                $.create('div').addClass('ScreenBlock__left').append(
                  $.create('div').addClass('ScreenBlock__logo').append(function(){
                    if(block.logo.image !== null) {
                      return $.create('div').addClass('Logo __large').css({
                        'background-image': 'url('+block.logo.image+')',
                        'background-color': block.logo.bgColor,
                        'color': block.logo.color
                      });
                    } else {
                      return $.create('div').addClass('Logo __default __large').html(block.logo.text).css({
                        'background-color': block.logo.bgColor,
                        'color': block.logo.color
                      });
                    }
                  })
                ),
                $.create('div').addClass('ScreenBlock__right').append(
                  $.create('div').addClass('ScreenBlock__right-wrapper').append(function(){
                    var block_title =
                      $.create('div').addClass('ScreenBlock__item-title').append(
                        $.create('div').addClass('ScreenBlock__item-title-left').html(block.title),
                        $.create('div').addClass('ScreenBlock__item-title-right').append(
                          $.create('span').addClass('ScreenBlock__item-time')
                        )
                      );
                    if(block.description == null) return block_title;
                    else return block_title.add($.create('div').addClass('ScreenBlock__description').html(block.description));
                  })
                )
              ).on("click", function(){
                if(typeof block.onClick !== undefined && block.onClick.type == "navigate") window.location.href = block.onClick.url;
              });
            }
            BlockList.append(BlockList_Row);
          });
          $('#SearchInput').after(BlockList);
          $('.BlockList').fadeIn(200);
          $('.SearchBlock__left-icon .fa').removeClass('fa-spinner fa-spin').addClass('fa-search');

          $(document).one('click', function(e){
            if(!$(e.target).is('.BlockList') && $(e.target).parents('.BlockList').length == 0){
              $('.BlockList').fadeOut(200, function(){ $(this).remove() });
            }
          });
        }
      });
    }, 300));

    $(document).on('click', '.SearchBlock__clear', function(){
      $('#SearchInput').val("");
    });
  }

  // --- обёртка breadcrumbs + page-header ---
  function wrapAndMove() {
    var crumbs = document.querySelector('.breadcrumbs, .breadcrumb');
    var pageHeader = document.querySelector('.page-header');
    if (!crumbs || !pageHeader) return;

    var headerBox = document.querySelector('.header_box');
    if (!headerBox) {
      headerBox = document.createElement('div');
      headerBox.className = 'header_box';
      if (crumbs.parentNode) crumbs.parentNode.insertBefore(headerBox, crumbs);
      else document.body.insertBefore(headerBox, document.body.firstChild);
    }

    if (!headerBox.contains(crumbs)) headerBox.appendChild(crumbs);
    if (!headerBox.contains(pageHeader)) headerBox.appendChild(pageHeader);

    var topWrapper = document.querySelector('.top_wrapper');
    if (topWrapper && !topWrapper.contains(headerBox)) {
      topWrapper.appendChild(headerBox);
    }
  }

  // --- обработка lesson-страниц ---
  function lessonPageFix() {
    if (!window.location.href.includes("/pl/teach/control/lesson/")) return;

    var crumbs = document.querySelector('.breadcrumbs, .breadcrumb');
    var pageHeader = document.querySelector('.page-header');
    if (!pageHeader) return;

    var headerLink = pageHeader.querySelector('h1 a');
    if (crumbs && headerLink && !headerLink.classList.contains('moved-by-script')) {
      var newLi = document.createElement('li');
      newLi.appendChild(headerLink);
      crumbs.appendChild(newLi);
      headerLink.classList.add('moved-by-script');
    }

    var lessonH2 = document.querySelector('.lesson-header-block h2');
    if (lessonH2 && !lessonH2.classList.contains('moved-h2')) {
      var h1 = pageHeader.querySelector('h1');
      if (h1) {
        h1.insertAdjacentElement('afterend', lessonH2);
      } else {
        pageHeader.insertAdjacentElement('afterend', lessonH2);
      }
      lessonH2.classList.add('moved-h2');
    }

    var lessonNav = document.querySelector('.lesson-header-block .lesson-navigation');
    var topWrapper = document.querySelector('.header_box');
    if (lessonNav && topWrapper && !lessonNav.classList.contains('moved-lesson-nav')) {
      topWrapper.appendChild(lessonNav);
      lessonNav.classList.add('moved-lesson-nav');
    }
  }

  // --- основной процесс ---
  function process() {
    insertSearchBlock();
    initSearch();
    wrapAndMove();
    lessonPageFix();
  }

  // --- ограничение по адресу ---
  if (window.location.pathname.includes("/teach")) {
    if (document.readyState === "loading") {
      document.addEventListener("DOMContentLoaded", process);
    } else {
      process();
    }

    var observer = new MutationObserver(function() {
      process();
    });
    observer.observe(document.body, { childList: true, subtree: true });
  }

})(jQuery);
