'use strict';
(function($){
  if (typeof window === 'undefined') return;
  var CFG = (window.KNSDD_TierReloc || {});
  if (!CFG.force) return; // sadece force açıkken çalış

  // Paylaşımlı yardımcılar: yalnızca global utils'i kullan
  var U = window.KNSDD_Utils;
  if(!U) return; // utils bulunamazsa güvenli çıkış
  var ready = U.ready;
  var debounce = U.debounce;
  var qsAny = U.qsAny;
  var qsaAny = U.qsaAny;
  var getPriceNode = U.getPriceNode;
  var isInDisallowed = U.isInDisallowed;
  var isVisible = U.isVisible;
  var formMatchesProduct = U.formMatchesProduct;
  var getProductId = U.getProductId;
  var uniqNodes = U.uniqNodes;
  var lastBefore = U.lastBefore;

  // utils guard
  if (!U.ready || !U.debounce || !U.qsAny || !U.qsaAny || !U.getPriceNode || !U.isInDisallowed || !U.isVisible || !U.formMatchesProduct || !U.getProductId || !U.uniqNodes || !U.lastBefore) return;
  

  function ensureVisible(container, summaryRoot, columnRoot, productRoot, formEl){
    try{
      var cs = getComputedStyle(container);
      var rect = container.getBoundingClientRect();
      var vis = (cs.display !== 'none' && cs.visibility !== 'hidden' && rect.width > 0 && rect.height > 0);
      if(vis) return true;
      if(summaryRoot){
        var first = summaryRoot.firstElementChild || summaryRoot.firstChild;
        if(first && first.parentNode){ first.parentNode.insertBefore(container, first); }
        cs = getComputedStyle(container); rect = container.getBoundingClientRect();
        vis = (cs.display !== 'none' && cs.visibility !== 'hidden' && rect.width > 0 && rect.height > 0);
        if(vis) return true;
      }
      if(columnRoot){
        try{
          // .product köküne taşımak iki sütun düzenini bozabilir; sadece gerçek sütun/summary içine taşı
          if(columnRoot !== productRoot){ columnRoot.insertBefore(container, columnRoot.firstChild || null); }
        }catch(_){ }
        cs = getComputedStyle(container); rect = container.getBoundingClientRect();
        vis = (cs.display !== 'none' && cs.visibility !== 'hidden' && rect.width > 0 && rect.height > 0);
        if(vis) return true;
      }
      // Yeni: form'un ebeveyn zinciri boyunca, her bir üst kapsayıcının önüne taşıyıp görünürlüğü test et
      try{
        var node = formEl;
        while(node && node !== productRoot){
          var parent = node.parentElement; if(!parent) break;
          parent.insertBefore(container, node);
          cs = getComputedStyle(container); rect = container.getBoundingClientRect();
          vis = (cs.display !== 'none' && cs.visibility !== 'hidden' && rect.width > 0 && rect.height > 0);
          if(vis) return true;
          node = parent;
        }
      }catch(_){ }
      // productRoot tepesine taşımayı atla; kök seviyede iki sütun arası bozulur
    } catch(_e){ }
    return false;
  }

  function pickMainForm(pid){
    var forms = qsaAny(CFG.selectors && CFG.selectors.form, document);
    if(!forms || !forms.length) return null;
    // 1) Doğrudan ürün ID eşleşen form
    for(var i=0;i<forms.length;i++){
      var f = forms[i];
      if(isInDisallowed(f) || !isVisible(f)) continue;
      if(formMatchesProduct(f, pid)) return f;
    }
    // 2) single-product .product içindeki görünür ilk form
    var main = document.querySelector('.single-product .product') || document.querySelector('.woocommerce .product');
    if(main){
      for(var j=0;j<forms.length;j++){
        var f2 = forms[j];
        if(isInDisallowed(f2) || !isVisible(f2)) continue;
        if(main.contains(f2)) return f2;
      }
    }
    // 3) Görünür ve yasak olmayan ilk form
    for(var k=0;k<forms.length;k++){
      var f3 = forms[k];
      if(isInDisallowed(f3) || !isVisible(f3)) continue;
      return f3;
    }
    return null;
  }

  function ensureContainer(){
    var el = document.querySelector('.knsdd-tier-table-container');
    if(el) return el;
    var pid = getProductId();
    if(!pid) return null;
    try{
      var id = 'knsdd-tier-' + pid + '-' + Math.random().toString(36).slice(2);
      var node = document.createElement('div');
      node.className = 'knsdd-tier-table-container';
      node.id = id;
      node.setAttribute('data-parent-id', String(pid));
      node.setAttribute('data-product-id', String(pid));
      document.body.appendChild(node);
      try{ document.dispatchEvent(new CustomEvent('knsdd:tier-container-added', { detail: { el: node, productId: pid } })); }catch(_){ }
      return node;
    }catch(_err){ return null; }
  }

  function moveContainer(){
    try{
      var container = document.querySelector('.knsdd-tier-table-container') || ensureContainer();
      if(!container) return false;
      // Elementor Shortcode/özel yerleşim: sabitse taşımayı bırak
      if(container.hasAttribute('data-fixed')) return true;
      var location = (CFG.location||'auto');
      // Önce doğru ana formu bul (ürün ID eşleşmesi + görünür + yasak olmayan kapsamlarda)
      var pid = getProductId();
      var formEl = pickMainForm(pid) || qsAny(CFG.selectors && CFG.selectors.form) || null;
      var productRoot = (formEl && formEl.closest) ? formEl.closest('.product') : null;
      if(!productRoot){ productRoot = document.querySelector('.single-product .product') || document.querySelector('.woocommerce .product') || document.querySelector('.product'); }
      var scope = productRoot || document;
      var priceEl = qsAny(CFG.selectors && CFG.selectors.price, scope) || qsAny(CFG.selectors && CFG.selectors.price);
      // Form ve buton, önce scope içinde; bulunamazsa tüm dokümanda
      formEl  = formEl || qsAny(CFG.selectors && CFG.selectors.form, scope)  || qsAny(CFG.selectors && CFG.selectors.form);
      var btnEl   = qsAny(CFG.selectors && CFG.selectors.button, scope)|| qsAny(CFG.selectors && CFG.selectors.button);

      function placeBefore(node, target){ if(!node||!target||!target.parentNode) return; if(node===target) return; target.parentNode.insertBefore(node, target); }
      function placeAfter(node, target){ if(!node||!target||!target.parentNode) return; if(node===target) return; target.parentNode.insertBefore(node, target.nextSibling); }

      if(location === 'price_above'){
        // 1) Adayları topla ve normalize et
        var raw = qsaAny(CFG.selectors && CFG.selectors.price, scope);
        var normalized = uniqNodes(raw.map(getPriceNode));
        var summaryRoot = (productRoot && productRoot.querySelector('.summary, .entry-summary')) || null;
        // Aynı kolon/kapsam: form.cart hangi kolon içindeyse, o kolon içindeki fiyatları tercih et
        var columnRoot = null;
        try{
          if(formEl && formEl.closest){ columnRoot = formEl.closest('.elementor-column, .summary, .entry-summary, .product'); }
        }catch(_){ }
        if(!columnRoot) columnRoot = summaryRoot || productRoot || document;
        // 2) Konteyneri doğru kolon/kapsama taşı (gerekirse)
        try{ if(columnRoot && !columnRoot.contains(container)){ columnRoot.insertBefore(container, columnRoot.firstChild || null); } }catch(_){}
        // 3) Filtre: summary içindekiler öncelikli; slider/listing içinde olanları ele
        var inSummary = normalized.filter(function(n){ return summaryRoot && summaryRoot.contains(n) && columnRoot.contains(n); });
        var others = normalized.filter(function(n){ return (!summaryRoot || !summaryRoot.contains(n)) && !isInDisallowed(n) && columnRoot && columnRoot.contains(n); });
        // 4) Hedef seçimi: önce summary içi, sonra formdan hemen önce gelen aday
        var target = null;
        if(inSummary && inSummary.length){
          target = formEl ? (lastBefore(inSummary, formEl) || inSummary[0]) : inSummary[0];
        } else if(others && others.length){
          target = formEl ? (lastBefore(others, formEl) || others[0]) : others[0];
        }
        if(target){ placeBefore(container, target); return ensureVisible(container, summaryRoot, columnRoot, productRoot, formEl); }
        // 5) Hedef bulunamazsa: form/buton/summary başlangıcı fallback
        if(formEl){ placeBefore(container, formEl); if(ensureVisible(container, summaryRoot, columnRoot, productRoot, formEl)) return true; }
        if(btnEl){ placeBefore(container, btnEl); if(ensureVisible(container, summaryRoot, columnRoot, productRoot, formEl)) return true; }
        var summaryForPrice = (productRoot && (productRoot.querySelector('.summary, .entry-summary'))) || document.querySelector('.product .summary, .entry-summary');
        if(summaryForPrice){ var first2 = summaryForPrice.firstElementChild || summaryForPrice.firstChild; if(first2){ placeBefore(container, first2); return ensureVisible(container, summaryRoot, columnRoot, productRoot, formEl); } }
      } else if(location === 'button_before'){
        if(formEl){ placeBefore(container, formEl); return true; }
        if(btnEl){ placeBefore(container, btnEl); return true; }
      } else if(location === 'button_after'){
        if(formEl){ placeAfter(container, formEl); return true; }
        if(btnEl){ placeAfter(container, btnEl); return true; }
      } else if(location === 'summary'){
        // Summary içinde kal: summary kökünü bul ve başına koy
        var summary = (productRoot && productRoot.querySelector('.summary, .entry-summary, .elementor-widget-woocommerce-product-price')) || document.querySelector('.product .summary, .entry-summary, .elementor-widget-woocommerce-product-price');
        if(summary){ var first2 = summary.firstElementChild || summary.firstChild; if(first2){ placeBefore(container, first2); return true; } }
      } else { // auto
        if(formEl){ placeBefore(container, formEl); return true; }
        if(priceEl){ placeBefore(container, priceEl); return true; }
        if(formEl){ placeAfter(container, formEl); return true; }
      }
      // hedef yoksa dokunma
      return false;
    } catch(e){ /* sessiz düş */ return false; }
  }

  var run = debounce(moveContainer, CFG.debounce || 120);

  function startRetries(){
    var attempts = 0, max = 20, interval = 250;
    var timer = setInterval(function(){
      attempts++;
      try{ ensureContainer(); if(moveContainer()){ clearInterval(timer); return; } }catch(_){ }
      if(attempts >= max){ clearInterval(timer); }
    }, interval);
  }

  ready(function(){
    run();
    startRetries();
    // WooCommerce varyasyon eventleri için jQuery ile dinle
    try{
      var $product = $('.product');
      var $form = $product.find('form.cart').first();
      if($form && $form.length){
        $form.on('found_variation reset_data hide_variation woocommerce_variation_has_changed change', run);
      }
    } catch(e){}

    // Elementor frontend init
    if (window.elementorFrontend && window.elementorFrontend.hooks) {
      try{ window.elementorFrontend.hooks.addAction('frontend/element_ready/global', run); } catch(_){ }
    }

    // MutationObserver: summary alanındaki yeniden yerleşimleri yakala (opsiyonel ve hafif)
    try{
      var target = document.querySelector('.product') || document.body;
      if(target && 'MutationObserver' in window){
        var obs = new MutationObserver(debounce(run, CFG.debounce || 120));
        obs.observe(target, { childList:true, subtree:true });
      }
    } catch(e){}
  });
})(window.jQuery);
