// ─── BookOutlet content.js ────────────────────────────────────────────────────
var HataDurum = false
var isStarted
var logs = ['Loglar']
var log = ''
var MagazaAdi = ''

chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) {
    if (message.Link) {
        window.location.reload()
        setTimeout(function () {
            window.location.reload()
        }, 1000)
    }
    if (message.UygulamaBaslatildi) {
        SekmeBilgileriGonder()
    }
    if (message.PageReload) {
        window.location.reload()
        setTimeout(function () {
            window.location.reload()
        }, 1000)
    }
    if (message.SekmeBulunamadi) {
        HataKontrolYap(1, 'Extension sekmesi bulunamadı!')
    }
})

$(document).ready(function () {
    chrome.storage.sync.get(
            ['isStarted', 'UrunGetirildi', 'Durum', 'MagazaAdi', 'RequestTime'],
            function (item) {
                setTimeout(async function () {
                    if (item.isStarted == true) {
                        MagazaAdi = item.MagazaAdi
                        if (item.UrunGetirildi == false) {
                            chrome.storage.sync.set(
                                    {UrunGetirildi: true, Durum: 'TypeKontrol'},
                                    function () {
                                        BirinciLinkKontrol()
                                    }
                            )
                            SekmeBilgileriGonder()
                        } else {
                            if (item.Durum == 'TypeKontrol') {
                                BirinciLinkKontrol()
                            }
                        }
                    }
                }, parseInt(item.RequestTime) * 1000)
            }
    )
})

// ─── Section Listesi ──────────────────────────────────────────────────────────
// BookOutlet section URL formatı:
//   All   → https://bookoutlet.com/books
//   Diğer → https://bookoutlet.com/books?qs=%24filters%24section%3D{value}
// Sayfa ekleme: All için ?page=2, diğerleri için &page=2
var ALL_SECTIONS = [
    {name: 'All', value: 'all', url: 'https://bookoutlet.com/books'},
    {name: 'Adult', value: 'adult', url: 'https://bookoutlet.com/books?qs=%24filters%24section%3Dadult'},
    {name: 'Adult and Teens & YA', value: 'adult-teens-young-adult', url: 'https://bookoutlet.com/books?qs=%24filters%24section%3Dadult-teens-young-adult'},
    {name: 'Teens & YA', value: 'teens-young-adult', url: 'https://bookoutlet.com/books?qs=%24filters%24section%3Dteens-young-adult'},
    {name: 'Kids', value: 'kids', url: 'https://bookoutlet.com/books?qs=%24filters%24section%3Dkids'}
]

// ─── Kategori Yardımcıları ────────────────────────────────────────────────────

// "Art and Photography" → "art-and-photography" (tamamen küçük harf)
function categoryTextToSlug(text) {
    // Noktalama işaretlerini kaldır (virgül vb), boşlukları tire yap
    var slug = text.trim().toLowerCase()
            .replace(/[,]/g, '')          // virgül kaldır: "Cooking, Food" → "cooking food"
            .replace(/\.\.\.$/g, '')    // sondaki ... kaldır (truncated isimler)
            .trim()
            .replace(/\s+/g, '-')         // boşluk → tire

    // Bilinen kategori listesiyle prefix eşleştir (truncated isimler için)
    var KNOWN_SLUGS = [
        'art-and-photography', 'biography-and-memoir', 'business', 'calendars',
        'comics-and-graphic-novels', 'computers', 'cooking-food-and-drink',
        'crafts-and-hobbies', 'education-and-study-aids', 'family-and-parenting',
        'fiction', 'health-and-fitness', 'history', 'hobbies-and-games', 'kids',
        'reference', 'religion-and-spirituality', 'romance',
        'science-and-technology', 'self-help-and-relationships', 'social-sciences',
        'sports-and-recreation', 'teen-and-young-adult', 'travel'
    ]
    // Tam eşleşme varsa direkt kullan
    if (KNOWN_SLUGS.indexOf(slug) !== -1)
        return slug
    // Prefix eşleştirme (truncated için)
    for (var i = 0; i < KNOWN_SLUGS.length; i++) {
        if (KNOWN_SLUGS[i].indexOf(slug) === 0)
            return KNOWN_SLUGS[i]
    }
    // Eşleşme yoksa slug'ı olduğu gibi döndür
    return slug
}

// Section value + kategori slug → tam URL
// All section:  $filters$group_id@=art-and-photography
// Diğerleri:    $filters$section=adult&group_id@=art-and-photography
function buildCategoryUrl(sectionValue, categorySlug, pageNum) {
    var qs
    if (sectionValue === 'all') {
        qs = '$filters$group_id@=' + categorySlug
    } else {
        qs = '$filters$section=' + sectionValue + '&group_id@=' + categorySlug
    }
    var encoded = encodeURIComponent(qs)
    var base = 'https://bookoutlet.com/books?qs=' + encoded
    if (pageNum && pageNum > 1)
        base += '&page=' + pageNum
    return base
}

// DOM'dan kategori listesini oku
function getCategoryListFromDOM() {
    var cats = []
    var seen = {}

    // facetName-category elementini bul, onun altındaki MuiCollapse-entered'ı al
    var facetEl = document.querySelector('[id*="facetName-category"]')
    if (!facetEl)
        return []

    // facetEl'den yukarı çık, MuiCollapse-entered içeren container'ı bul
    // Genellikle facetEl'in üst parent'larından biri MuiCollapse-entered'ı barındırır
    var container = facetEl
    var collapseWrapper = null
    for (var i = 0; i < 10; i++) {
        if (!container.parentElement)
            break
        container = container.parentElement
        // Bu container'ın altında MuiCollapse-entered var mı?
        var entered = container.querySelector('.MuiCollapse-entered .MuiCollapse-wrapperInner')
        if (entered) {
            collapseWrapper = entered
            break
        }
    }

    if (!collapseWrapper)
        return []

    // overflow-wrap div'lerini bul - kategori isimleri burada
    var divs = collapseWrapper.querySelectorAll('div[style*="overflow-wrap"]')
    divs.forEach(function (div) {
        var txt = div.textContent.trim()
        if (txt && txt.length > 1 && !seen[txt]) {
            seen[txt] = true
            cats.push(txt)
        }
    })

    // Bulamazsak MuiListItemText-dense içindeki text'leri dene
    if (cats.length === 0) {
        collapseWrapper.querySelectorAll('.MuiListItemText-dense span').forEach(function (span) {
            if (span.children.length === 0) {
                var txt = span.textContent.trim()
                if (txt && txt.length > 1 && !/^\d/.test(txt) && !seen[txt]) {
                    seen[txt] = true
                    cats.push(txt)
                }
            }
        })
    }

    return cats
}

// Virtualized kategori listesinin scroll container'ını bul
function getCategoryScrollContainer() {
    var facetEl = document.querySelector('[id*="facetName-category"]')
    if (!facetEl)
        return null

    var container = facetEl
    for (var i = 0; i < 10; i++) {
        if (!container.parentElement)
            break
        container = container.parentElement
        var entered = container.querySelector('.MuiCollapse-entered .MuiCollapse-wrapperInner')
        if (entered) {
            // jss119 gibi overflow:auto olan scroll container'ı bul
            var scrollEl = entered.querySelector('[style*="overflow"]')
            return scrollEl || entered
        }
    }
    return null
}

// Category / Subject panelini aç ve kategori listesini döndür
// Virtualized list'i scroll ederek tüm kategorileri toplar
async function openCategoryPanelAndGetList() {
    return new Promise(function (resolve) {

        // --- Paneli aç ---
        var catBtn = null
        document.querySelectorAll('[id*="facetName-category"]').forEach(function (el) {
            var parent = el.closest('[role="button"]')
            if (parent)
                catBtn = parent
        })

        // Panel zaten açık mı?
        var alreadyOpen = getCategoryListFromDOM().length > 0
        if (!alreadyOpen) {
            if (!catBtn) {
                console.log('[BookOutlet] Kategori butonu bulunamadı')
                resolve([])
                return
            }
            catBtn.click()
            console.log('[BookOutlet] Kategori paneli açılıyor...')
        }

        // Panel açılana kadar bekle (max 5s), sonra scroll ile tüm kategorileri topla
        var openAttempts = 0
        var openTimer = setInterval(function () {
            openAttempts++
            var list = getCategoryListFromDOM()
            if (list.length > 0) {
                clearInterval(openTimer)
                console.log('[BookOutlet] Panel açıldı, scroll ile kategoriler toplanıyor...')
                scrollAndCollectAllCategories(resolve)
            } else if (openAttempts > 10) {
                clearInterval(openTimer)
                console.log('[BookOutlet] Kategori paneli açılamadı')
                resolve([])
            }
        }, 500)
    })
}

// Virtualized listeyi scroll ettirerek tüm kategori isimlerini toplar
function scrollAndCollectAllCategories(resolve) {
    var scrollEl = getCategoryScrollContainer()
    if (!scrollEl) {
        console.log('[BookOutlet] Scroll container bulunamadı, mevcut liste kullanılıyor')
        resolve(getCategoryListFromDOM())
        return
    }

    var allCats = {}   // tekrar engeli için obje
    var scrollStep = 108  // 3 item yüksekliği (her item 36px)
    var noNewCount = 0    // üst üste yeni isim gelmeme sayacı
    var maxNoNew = 5      // bu kadar adım yeni isim gelmezse bitir
    var maxSteps = 200    // sonsuz döngü güvencesi

    // Başa al
    scrollEl.scrollTop = 0

    function collectVisible() {
        var list = getCategoryListFromDOM()
        var added = 0
        list.forEach(function (cat) {
            if (!allCats[cat]) {
                allCats[cat] = true
                added++
            }
        })
        return added
    }

    function step(stepCount) {
        if (stepCount > maxSteps) {
            finish()
            return
        }

        collectVisible()

        var prevCount = Object.keys(allCats).length
        scrollEl.scrollTop += scrollStep

        // DOM güncellemesi için kısa bekle
        setTimeout(function () {
            var added = collectVisible()
            if (added === 0) {
                noNewCount++
            } else {
                noNewCount = 0
            }

            console.log('[BookOutlet] Scroll adım ' + stepCount + ' | toplam: ' + Object.keys(allCats).length + ' kategori | yeni: ' + added)

            if (noNewCount >= maxNoNew) {
                // Listenin sonuna ulaşıldı
                finish()
            } else {
                step(stepCount + 1)
            }
        }, 150)
    }

    function finish() {
        // Scroll'u başa al
        scrollEl.scrollTop = 0
        var result = Object.keys(allCats)
        console.log('[BookOutlet] Tüm kategoriler toplandı: ' + result.length + ' adet → ' + result.join(', '))
        resolve(result)
    }

    step(0)
}

// URL'den mevcut kategori slug'ını çek
function getCategorySlugFromUrl(url) {
    var decoded = decodeURIComponent(url)
    // group_id@=Art-and-photography veya group_id%40%3DArt-and-photography
    var m = decoded.match(/group_id[@%40]+[=%3D]+([^&]+)/i)
    if (m)
        return m[1]
    // Alternatif: group_id@= formatı
    var m2 = decoded.match(/group_id@=([^&\s]+)/)
    return m2 ? m2[1] : null
}

// URL'den mevcut section value'sunu çek
function getSectionValueFromUrl(url) {
    var decoded = decodeURIComponent(url)
    if (decoded.indexOf('section=') === -1)
        return 'all'
    var m = decoded.match(/section=([^&\s]+)/)
    return m ? m[1] : 'all'
}

// ─── UI ───────────────────────────────────────────────────────────────────────
function dialogModal(message, background) {
    background = background || 'limegreen'
    $('.extDialog').remove()
    var loader = document.createElement('div')
    $(loader).addClass('extDialog')
    $(loader).css({
        position: 'fixed', width: '220px', height: 'auto', minHeight: '120px',
        background: background, color: '#fff', overflowWrap: 'anywhere',
        fontWeight: 'bold', bottom: '10px', right: '10px', zIndex: '9999',
        display: 'flex', justifyContent: 'center', alignItems: 'center',
        textAlign: 'center', borderRadius: '12px', padding: '10px',
        fontSize: '13px', lineHeight: '1.5', boxShadow: '0 4px 12px rgba(0,0,0,0.3)'
    })
    $(loader).html(message)
    document.body.append(loader)
    return loader
}

// ─── Scroll ───────────────────────────────────────────────────────────────────
function getShowMoreButton() {
    // "Show More" butonunu bul
    var btns = document.querySelectorAll('button')
    for (var i = 0; i < btns.length; i++) {
        var txt = btns[i].textContent.trim()
        if (txt === 'Show More')
            return btns[i]
    }
    return null
}

function hasPagination() {
    // Gerçek pagination nav var mı? (Show More değil)
    var nav = document.querySelector('nav[aria-label="pagination navigation"]')
    if (!nav)
        return false
    // İçinde sayfa linkleri var mı?
    var pageLinks = nav.querySelectorAll('a[href]')
    return pageLinks.length > 0
}

async function showMoreKontrol() {
    // Show More butonunu tıkla, kaybolana kadar devam et
    // Pagination varsa zaten hazır - Show More yoksa da hazır
    return new Promise(function (resolve) {
        var maxAttempts = 15
        var attempt = 0

        function check() {
            attempt++
            if (attempt > maxAttempts) {
                console.log('[BookOutlet] Show More max attempt, devam ediliyor')
                resolve()
                return
            }

            var showMoreBtn = getShowMoreButton()
            var paginationOk = hasPagination()

            // Pagination varsa hazır
            if (paginationOk) {
                console.log('[BookOutlet] Pagination hazır')
                resolve()
                return
            }

            // Show More varsa tıkla ve bekle
            if (showMoreBtn) {
                console.log('[BookOutlet] Show More tıklanıyor... (' + attempt + ')')
                showMoreBtn.click()
                setTimeout(check, 2500)
                return
            }

            // Ne Show More ne pagination:
            // Sayfa zaten tam yüklü (küçük kategori sayfaları böyle olabilir)
            console.log('[BookOutlet] Ne Show More ne pagination - sayfa hazır kabul ediliyor')
            resolve()
        }

        // İlk kontrol için kısa bir bekleme (sayfa render için)
        setTimeout(check, 1000)
    })
}

async function scrollSayfayiYukle() {
    // Show More / pagination kontrolü yap (scroll öncesi)
    await showMoreKontrol()

    return new Promise(function (resolve) {
        var distance = 400
        var scrolled = 0
        var done = false

        function finish() {
            if (done)
                return
            done = true
            clearInterval(scrollTimer)
            clearInterval(showMoreTimer)
            clearTimeout(safety)
            window.scrollTo(0, 0)
            setTimeout(function () {
                resolve()
            }, 3000)
        }

        // Scroll timer
        var scrollTimer = setInterval(function () {
            var maxScroll = Math.max(document.body.scrollHeight, 3000)
            window.scrollBy(0, distance)
            scrolled += distance
            if (scrolled >= maxScroll)
                finish()
        }, 200)

        // Show More kontrolü - scroll sırasında da sürekli kontrol et
        var showMoreTimer = setInterval(function () {
            var btn = getShowMoreButton()
            if (btn && !hasPagination()) {
                console.log('[BookOutlet] Scroll sırasında Show More tıklandı')
                btn.click()
                scrolled = 0  // Scroll'u sıfırla, yeni içerik gelecek
            }
        }, 1500)

        var safety = setTimeout(function () {
            finish()
        }, 20000)
    })
}

// ─── URL Yardımcıları ─────────────────────────────────────────────────────────
// BookOutlet URL formatı:
//   All, page 1 : https://bookoutlet.com/books
//   All, page 2 : https://bookoutlet.com/books?page=2
//   Diğer, page 1: https://bookoutlet.com/books?qs=...
//   Diğer, page 2: https://bookoutlet.com/books?qs=...&page=2

function buildUrl(sectionIndex, pageNum) {
    var section = ALL_SECTIONS[sectionIndex]
    var base = section.url
    if (pageNum <= 1)
        return base
    if (section.value === 'all') {
        return base + '?page=' + pageNum
    }
    return base + '&page=' + pageNum
}

function getCurrentPageFromUrl(url) {
    var m = url.match(/[?&]page=(\d+)/)
    return m ? parseInt(m[1]) : 1
}

function getSectionIndexFromUrl(url) {
    // URL'den hangi section olduğunu belirle
    // Decode ederek karşılaştır: %3D = =, %24 = $
    var decoded = decodeURIComponent(url)
    // All: sadece /books veya /books?page=N - qs parametresi yok
    if (decoded.indexOf('section=') === -1)
        return 0
    // section= değerini çek
    var m = decoded.match(/section=([^&]+)/)
    if (!m)
        return 0
    var sectionValue = m[1]
    for (var i = 1; i < ALL_SECTIONS.length; i++) {
        if (ALL_SECTIONS[i].value === sectionValue)
            return i
    }
    return 0
}

function getTotalPages() {
    // "X-Y of Top 10,000 Results" veya benzer pagination text
    var h6 = document.querySelector('h6.MuiTypography-subtitle2')
    if (h6 && h6.textContent.indexOf('10,000') !== -1)
        return 9999

    // Pagination'daki son sayfa numarasını bul
    var lastPageBtn = null
    document.querySelectorAll('a[aria-label]').forEach(function (a) {
        var lbl = a.getAttribute('aria-label') || ''
        var m = lbl.match(/^page\s+(\d+)$/i)
        if (m) {
            var num = parseInt(m[1])
            if (!lastPageBtn || num > lastPageBtn)
                lastPageBtn = num
        }
    })
    if (lastPageBtn)
        return lastPageBtn
    return 9999
}

function hasNextPage() {
    var currentPage = getCurrentPageFromUrl(window.location.href)

    // Yöntem 1: Pagination nav var mı ve sonraki sayfa linki var mı?
    var nextBtns = document.querySelectorAll('[aria-label="Go to next page"]')
    if (nextBtns.length > 0) {
        var disabled = nextBtns[0].getAttribute('aria-disabled')
        if (disabled === 'true')
            return false
        if (disabled === 'false')
            return true
    }

    // Yöntem 2: Pagination'daki page linklerinden mevcut sayfadan büyük olan var mı?
    var maxLinkedPage = 0
    document.querySelectorAll('a[href]').forEach(function (a) {
        var href = a.getAttribute('href') || ''
        var m = href.match(/[?&]page=(\d+)/)
        if (m) {
            var p = parseInt(m[1])
            if (p > maxLinkedPage)
                maxLinkedPage = p
        }
    })
    if (maxLinkedPage > currentPage)
        return true

    return false
}

function noBooksFound() {
    // Kitap linklerini href üzerinden ara - en güvenilir yöntem
    var bookLinks = document.querySelectorAll('a[href*="/book/"]')
    var found = false
    bookLinks.forEach(function (a) {
        var href = a.getAttribute('href') || ''
        if (/\/book\/[^\/]+\/[^\/]+\/[0-9]{10,}/.test(href))
            found = true
    })
    if (!found)
        return true

    // "0 Results" kontrolü
    var allText = document.body.innerText || ''
    if (/\b0\s+Results\b/i.test(allText))
        return true

    return false
}

// ─── ISBN13 & Fiyat Parse ──────────────────────────────────────────────────────
// BookOutlet HTML: data-cnstrc-item-id="9781496758040B" → son harf kaldırılır → ISBN13
// Fiyat: jss1367 class'lı p içinde <span><span>$10.99</span></span>
//        veya indirimli: <span>$6.49</span> <span>$3.99</span> (kırmızı olan indirimli)

function extractIsbnDataFromDOM() {
    var results = []
    var seen = {}

    // ISBN: href="/book/slug/author/9781234567890B" formatından çek
    // Fiyat: kitap linkinin parent container'ında <span><span>$X.XX</span></span>
    document.querySelectorAll('a[href*="/book/"]').forEach(function (a) {
        var href = a.getAttribute('href') || ''
        // URL'nin son segmentinden ISBN çek
        var m = href.match(/\/([0-9]{10,})[A-Za-z]*$/)
        if (!m)
            return

        var isbn = m[1]
        if (!isbn || isbn.length < 10)
            return
        if (seen[isbn])
            return
        seen[isbn] = true

        var price = null

        // Yöntem 1: data-cnstrc-item-price attribute — en güvenilir kaynak
        // BookOutlet bu attribute'u constructor.io analytics için koyuyor,
        // her zaman gerçek satış fiyatını (indirimli) tutuyor
        var cnstrcEl = a.querySelector('[data-cnstrc-item-price]')
        if (cnstrcEl) {
            var attrPrice = parseFloat(cnstrcEl.getAttribute('data-cnstrc-item-price'))
            if (!isNaN(attrPrice) && attrPrice > 0) {
                price = attrPrice
            }
        }

        // Yöntem 2: jss2858 class'lı span — indirimli fiyat span'ı (kırmızı renk)
        // İndirim varsa: jss2857=eski fiyat, jss2858=indirimli fiyat
        if (price === null) {
            var discountSpan = a.querySelector('span.jss2858')
            if (discountSpan) {
                var dTxt = discountSpan.textContent.trim()
                var dm = dTxt.match(/\$([0-9]+\.[0-9]+)/)
                if (dm)
                    price = parseFloat(dm[1])
            }
        }

        // Yöntem 3: a tag'inin KENDİ içindeki span'lardan fiyat çek
        // ÖNEMLİ: a'nın dışına çıkmıyoruz — komşu ürünlerin fiyatları karışmasın
        if (price === null) {
            var allSpans = a.querySelectorAll('span')
            var prices = []
            allSpans.forEach(function (s) {
                // Sadece direkt text içeren span (child span olmayan)
                if (s.children.length === 0) {
                    var txt = s.textContent.trim()
                    var pm = txt.match(/^\$([0-9]+\.[0-9]+)$/)
                    if (pm)
                        prices.push(parseFloat(pm[1]))
                }
            })
            if (prices.length > 0) {
                // En küçük fiyat = indirimli fiyat
                price = Math.min.apply(null, prices)
            }
        }

        // Yöntem 3: a tag'i içindeki genel text
        if (price === null) {
            var innerTxt = a.innerText || ''
            var m2 = innerTxt.match(/\$([0-9]+\.[0-9]+)/)
            if (m2)
                price = parseFloat(m2[1])
        }

        results.push({asin: isbn, price: price, condition: 'New'})
    })

    console.log('[BookOutlet] ' + results.length + ' ISBN bulundu')
    return results
}

// ─── Servise Gönder ───────────────────────────────────────────────────────────
async function SiparisTamamla(dataArray) {
    if (dataArray.length === 0) {
        console.log('[BookOutlet] Bu sayfada ISBN yok, devam...')
        return
    }
    return new Promise(function (resolve) {
        // Extension context invalidated kontrolü
        try {
            chrome.storage.sync.get
        } catch (e) {
            console.log('[BookOutlet] Extension context invalidated, devam ediliyor')
            resolve();
            return
        }
        chrome.storage.sync.get(['MagazaAdi', 'UrunID', 'ApiUrl'], function (item) {
            if (chrome.runtime.lastError) {
                console.log('[BookOutlet] Storage hatası:', chrome.runtime.lastError.message)
                resolve();
                return
            }
            var datam = {
                AsinArray: dataArray.map(function (x) {
                    return x.asin
                }),
                FiyatArray: dataArray.map(function (x) {
                    return x.price
                }),
                ConditionArray: dataArray.map(function (x) {
                    return x.condition
                }),
                magazaDeger: item.MagazaAdi,
                tip: 'newAsinEnd'
            }
            $.ajax({
                type: 'post', url: item.ApiUrl + 'ExtensionWebServis/ajaxCall',
                beforeSend: function (xhr) {
                    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest')
                },
                cache: false, dataType: 'json', data: datam,
                success: function (cevap) {
                    if (cevap.hata == 0 || cevap.hata === '0') {
                        console.log('[BookOutlet] Servis OK: ' + cevap.hatatext)
                    } else {
                        console.log('[BookOutlet] Servis cevap: ' + JSON.stringify(cevap))
                    }
                    resolve()
                },
                error: function (req, textStatus, errorThrown) {
                    console.log('[BookOutlet] Ajax hata:', textStatus, errorThrown)
                    resolve()
                }
            })
        })
    })
}

// ─── Sonraki Section Hesapla ──────────────────────────────────────────────────
function hesaplaGecis(sectionIdx) {
    var next = sectionIdx + 1
    if (next >= ALL_SECTIONS.length) {
        next = 0
        console.log('[BookOutlet] Tüm sectionlar tamamlandı, başa dönülüyor...')
    }
    return next
}

// ─── Ana Döngü ────────────────────────────────────────────────────────────────
async function BirinciLinkKontrol() {
    try {
        chrome.storage.sync.get
    } catch (e) {
        console.log('[BookOutlet] Extension context invalidated - sayfa yenileniyor')
        setTimeout(function () {
            window.location.reload()
        }, 2000)
        return
    }
    chrome.storage.sync.get(
            ['LastIndex', 'SearchUrl', 'CurrentSectionIndex', 'CategoryList', 'CurrentCategoryIndex'],
            async function (item) {
                // SectionIndex URL'den türet
                var sectionIndex = getSectionIndexFromUrl(window.location.href)
                var storedIdx = parseInt(item.CurrentSectionIndex) || 0
                if (sectionIndex !== storedIdx) {
                    console.log('[BookOutlet] SectionIndex düzeltildi: ' + storedIdx + ' -> ' + sectionIndex)
                    chrome.storage.sync.set({CurrentSectionIndex: sectionIndex})
                }
                if (sectionIndex >= ALL_SECTIONS.length)
                    sectionIndex = 0

                var currentSection = ALL_SECTIONS[sectionIndex]
                var currentPage = getCurrentPageFromUrl(window.location.href)
                if (currentPage < 1)
                    currentPage = 1

                // Kategori bilgisi
                var categoryList = item.CategoryList || []
                var categoryIndex = parseInt(item.CurrentCategoryIndex) || 0
                var currentCategorySlug = getCategorySlugFromUrl(window.location.href)

                var loader = dialogModal('Başlatılıyor...')

                // ── Show More / Pagination hazırla ────────────────────────────
                $(loader).html(
                        '📂 ' + currentSection.name + '<br>' +
                        'Section: ' + (sectionIndex + 1) + '/' + ALL_SECTIONS.length + '<br>' +
                        (currentCategorySlug ? '🏷️ ' + currentCategorySlug + '<br>' : '') +
                        'Sayfa: ' + currentPage + '<br>' +
                        'Hazırlanıyor...'
                        )

                await showMoreKontrol()

                // ── Kategori listesi henüz yok → aç ve oku ───────────────────
                if (categoryList.length === 0 && !currentCategorySlug) {
                    $(loader).html('📂 ' + currentSection.name + '<br>Kategoriler okunuyor...')
                    categoryList = await openCategoryPanelAndGetList()
                    if (categoryList.length > 0) {
                        categoryIndex = 0
                        await new Promise(function (r) {
                            chrome.storage.sync.set({
                                CategoryList: categoryList,
                                CurrentCategoryIndex: 0
                            }, r)
                        })
                        console.log('[BookOutlet] Kategoriler kaydedildi:', categoryList)
                        // İlk kategoriye git
                        var firstSlug = categoryTextToSlug(categoryList[0])
                        var firstUrl = buildCategoryUrl(currentSection.value, firstSlug, 1)
                        await new Promise(function (r) {
                            setTimeout(r, 3000)
                        })
                        window.location.href = firstUrl
                        return
                    } else {
                        console.log('[BookOutlet] Kategori listesi boş, direkt section taranıyor')
                    }
                }

                // ── Scroll ───────────────────────────────────────────────────
                $(loader).html(
                        '📂 ' + currentSection.name + '<br>' +
                        (currentCategorySlug ? '🏷️ ' + currentCategorySlug.replace(/-/g, ' ') + '<br>' : '') +
                        'Kat: ' + (categoryIndex + 1) + '/' + categoryList.length + '<br>' +
                        'Sayfa: ' + currentPage + '<br>' +
                        'Scroll yapılıyor...'
                        )

                await scrollSayfayiYukle()

                // ── Kitap yok kontrolü ───────────────────────────────────────
                if (noBooksFound()) {
                    console.log('[BookOutlet] Kitap yok')
                    var reqTime = Math.floor(Math.random() * 5) + 4
                    // Sonraki kategoriye veya section'a geç
                    await hesaplaGecisKategori(sectionIndex, categoryIndex, categoryList, loader, reqTime)
                    return
                }

                // ── ISBN & Fiyat çek ─────────────────────────────────────────
                var results = extractIsbnDataFromDOM()

                $(loader).html(
                        '📂 ' + currentSection.name + '<br>' +
                        (currentCategorySlug ? '🏷️ ' + currentCategorySlug.replace(/-/g, ' ') + '<br>' : '') +
                        'Kat: ' + (categoryIndex + 1) + '/' + categoryList.length + '<br>' +
                        'Sayfa: ' + currentPage + ' | ' + results.length + ' ISBN'
                        )

                // ── Servise gönder ───────────────────────────────────────────
                await SiparisTamamla(results)

                // ── Sonraki adım ─────────────────────────────────────────────
                var reqTime = Math.floor(Math.random() * 9) + 6

                if (hasNextPage()) {
                    // Aynı kategori, sonraki sayfa
                    var nextPage = currentPage + 1
                    var nextUrl
                    if (currentCategorySlug) {
                        nextUrl = buildCategoryUrl(currentSection.value, currentCategorySlug, nextPage)
                    } else {
                        nextUrl = buildUrl(sectionIndex, nextPage)
                    }

                    $(loader).html(
                            '📂 ' + currentSection.name + '<br>' +
                            (currentCategorySlug ? '🏷️ ' + currentCategorySlug.replace(/-/g, ' ') + '<br>' : '') +
                            'Sayfa ' + currentPage + ' bitti | ' + reqTime + 's → Sayfa ' + nextPage
                            )

                    await new Promise(function (r) {
                        chrome.storage.sync.set({LastIndex: nextPage, CurrentSectionIndex: sectionIndex}, function () {
                            setTimeout(r, reqTime * 1000)
                        })
                    })
                    window.location.href = nextUrl
                } else {
                    // Kategori bitti → sonraki kategori veya section
                    await hesaplaGecisKategori(sectionIndex, categoryIndex, categoryList, loader, reqTime)
                }
            }
    )
}

// ─── Kategori/Section Geçiş Hesabı ───────────────────────────────────────────
async function hesaplaGecisKategori(sectionIndex, categoryIndex, categoryList, loader, reqTime) {
    var currentSection = ALL_SECTIONS[sectionIndex]

    if (categoryList.length > 0 && categoryIndex + 1 < categoryList.length) {
        // Sonraki kategori
        var nextCatIdx = categoryIndex + 1
        var nextSlug = categoryTextToSlug(categoryList[nextCatIdx])
        var nextUrl = buildCategoryUrl(currentSection.value, nextSlug, 1)

        $(loader).html(
                '✅ ' + categoryList[categoryIndex] + ' bitti!<br>' +
                '📂 ' + currentSection.name + '<br>' +
                '🏷️ ' + categoryList[nextCatIdx] + '<br>' +
                reqTime + 's sonra başlıyor...'
                )

        await new Promise(function (r) {
            chrome.storage.sync.set({
                LastIndex: 1,
                CurrentCategoryIndex: nextCatIdx,
                CurrentSectionIndex: sectionIndex
            }, function () {
                setTimeout(r, reqTime * 1000)
            })
        })
        window.location.href = nextUrl

    } else {
        // Tüm kategoriler bitti → sonraki section
        var nextSectionIdx = sectionIndex + 1
        if (nextSectionIdx >= ALL_SECTIONS.length) {
            nextSectionIdx = 0
            console.log('[BookOutlet] Tüm section ve kategoriler tamamlandı, başa dönülüyor...')
        }
        var nextSection = ALL_SECTIONS[nextSectionIdx]
        var nextUrl = nextSection.url  // Section'ın ana URL'i - kategoriler yeniden okunacak

        $(loader).html(
                '✅ ' + currentSection.name + ' tüm kategoriler bitti!<br>' +
                '📂 ' + nextSection.name + '<br>' +
                reqTime + 's sonra başlıyor...'
                )

        await new Promise(function (r) {
            chrome.storage.sync.set({
                LastIndex: 1,
                CurrentSectionIndex: nextSectionIdx,
                CurrentCategoryIndex: 0,
                CategoryList: []  // Yeni section için kategori listesi sıfırla
            }, function () {
                setTimeout(r, reqTime * 1000)
            })
        })
        window.location.href = nextUrl
    }
}

// ─── Yardımcı Fonksiyonlar ────────────────────────────────────────────────────
function SekmeBilgileriGonder() {
    chrome.runtime.sendMessage({AktifSekmeBilgileri: true})
}
function AppLog(log) {
    var time = new Date().toLocaleString()
    var test = log + ' - ' + time
    if (logs.length < 6) {
        logs.push(test)
    } else {
        logs.splice(0, 1)
        logs.push(test)
    }
    localStorage.setItem('LocalStorageAppLog', JSON.stringify(logs))
    chrome.storage.sync.set({AppLog: test}, function () {})
}
function AppLogGonder() {
    chrome.runtime.sendMessage({HataDurum: HataDurum, isStarted: isStarted, AppLog: logs})
}
var HataKontrol
function HataKontrolYap(time, msj2) {
    HataKontrol = setTimeout(function () {
        chrome.storage.sync.get(['isStarted', 'PcName', 'UygulamaAdi', 'Durum', 'UrunID', 'MagazaAdi'], function (item) {
            var msj = 'Bilgisayar: ' + item.PcName + ' Mağaza: ' + item.MagazaAdi + ' Durum: ' + item.Durum + ' iken durdu! ' + (msj2 || '')
            $.ajax({
                type: 'post', url: 'https://www.andromedaworkspace.com/Extension/ajaxCall',
                beforeSend: function (xhr) {
                    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest')
                },
                cache: false, dataType: 'json', data: {ID: item.UrunID, tip: 'newOrderBreak', mesaj: msj},
                success: function () {
                    console.log('Hata bilgisi gönderildi')
                },
                error: function (r, s, e) {
                    console.log('Ooops: ' + s + ' ' + e)
                }
            })
        })
    }, parseInt(time) * 1000)
}