// Модуль замены всех изображений (включая SVG) на ишака
let ishakifyEnabled = false;
const DONKEY_IMG = chrome.runtime.getURL('logos/Ishak.png');

// Замена <img> с сохранением srcset
function replaceImageWithDonkey(img) {
    if (img.dataset.ishakified === 'true') return;
    if (!img.dataset.originalSrc) {
        img.dataset.originalSrc = img.src;
    }
    if (img.srcset && !img.dataset.originalSrcset) {
        img.dataset.originalSrcset = img.srcset;
    }
    if (img.sizes && !img.dataset.originalSizes) {
        img.dataset.originalSizes = img.sizes;
    }
    img.removeAttribute('srcset');
    img.removeAttribute('sizes');
    img.src = DONKEY_IMG;
    img.dataset.ishakified = 'true';
}

function restoreImage(img) {
    if (img.dataset.originalSrc) {
        img.src = img.dataset.originalSrc;
    }
    if (img.dataset.originalSrcset) {
        img.srcset = img.dataset.originalSrcset;
    }
    if (img.dataset.originalSizes) {
        img.sizes = img.dataset.originalSizes;
    }
    delete img.dataset.originalSrc;
    delete img.dataset.originalSrcset;
    delete img.dataset.originalSizes;
    delete img.dataset.ishakified;
}

// Замена <svg> на <img>
function replaceSvgWithDonkey(svg) {
    if (svg.dataset.ishakified === 'true') return;

    let width = svg.getAttribute('width');
    let height = svg.getAttribute('height');
    if (!width || !height) {
        const rect = svg.getBoundingClientRect();
        width = rect.width || 40;
        height = rect.height || 40;
    } else {
        width = parseInt(width, 10);
        height = parseInt(height, 10);
    }

    const img = document.createElement('img');
    img.src = DONKEY_IMG;
    img.width = width;
    img.height = height;
    img.alt = 'Ишак';

    if (svg.className) {
        img.className = svg.className;
    }

    img.dataset.originalTag = 'svg';
    img.dataset.originalSvg = svg.outerHTML;

    svg.parentNode.replaceChild(img, svg);
    img.dataset.ishakified = 'true';
}

function restoreSvg(img) {
    if (img.dataset.originalSvg) {
        const tempDiv = document.createElement('div');
        tempDiv.innerHTML = img.dataset.originalSvg;
        const originalSvg = tempDiv.firstChild;
        img.parentNode.replaceChild(originalSvg, img);
    }
}

function applyIshakify() {
    const images = document.querySelectorAll('img');
    images.forEach(img => {
        if (ishakifyEnabled) {
            replaceImageWithDonkey(img);
        } else {
            restoreImage(img);
        }
    });

    const svgs = document.querySelectorAll('svg');
    svgs.forEach(svg => {
        if (ishakifyEnabled) {
            replaceSvgWithDonkey(svg);
        }
    });

    if (!ishakifyEnabled) {
        const fakeImgs = document.querySelectorAll('img[data-original-svg]');
        fakeImgs.forEach(img => restoreSvg(img));
    }
}

let ishakifyObserver = null;

function enableIshakify() {
    if (ishakifyEnabled) return;
    ishakifyEnabled = true;
    applyIshakify();

    if (!ishakifyObserver) {
        ishakifyObserver = new MutationObserver((mutations) => {
            if (!ishakifyEnabled) return;
            mutations.forEach(mutation => {
                mutation.addedNodes.forEach(node => {
                    if (node.nodeName === 'IMG') {
                        replaceImageWithDonkey(node);
                    } else if (node.nodeName === 'svg' || node.nodeName === 'SVG') {
                        replaceSvgWithDonkey(node);
                    } else if (node.querySelectorAll) {
                        node.querySelectorAll('img').forEach(img => replaceImageWithDonkey(img));
                        node.querySelectorAll('svg').forEach(svg => replaceSvgWithDonkey(svg));
                    }
                });
            });
        });
        ishakifyObserver.observe(document.body, { childList: true, subtree: true });
    }

    localStorage.setItem('ishakifyEnabled', 'true');
}

function disableIshakify() {
    if (!ishakifyEnabled) return;
    ishakifyEnabled = false;
    if (ishakifyObserver) {
        ishakifyObserver.disconnect();
        ishakifyObserver = null;
    }
    applyIshakify(); // восстанавливает все изображения

    // После восстановления запускаем applyAllChanges, чтобы другие модули применили свои замены
    if (window.applyAllChanges) {
        window.applyAllChanges();
    }

    localStorage.setItem('ishakifyEnabled', 'false');
}

function loadIshakifyState() {
    return localStorage.getItem('ishakifyEnabled') === 'true';
}

function initIshakify() {
    const enabled = loadIshakifyState();
    if (enabled) {
        enableIshakify();
    }
}

window.enableIshakify = enableIshakify;
window.disableIshakify = disableIshakify;
window.loadIshakifyState = loadIshakifyState;
window.initIshakify = initIshakify;