import { Handler } from '/csspageweaver/lib/paged.esm.js';

export default class counters extends Handler {
    constructor(chunker, polisher, caller) {
        super(chunker, polisher, caller);
    }

    // Convertir en upper-alpha (A, B, C...)
    toUpperAlpha(num) {
        return String.fromCharCode(64 + num);
    }

    // Convertir en lower-alpha (a, b, c...)
    toLowerAlpha(num) {
        return String.fromCharCode(96 + num);
    }

    // Convertir en upper-roman (I, II, III...)
    toUpperRoman(num) {
        const romanNumerals = [
            ['M', 1000], ['CM', 900], ['D', 500], ['CD', 400],
            ['C', 100], ['XC', 90], ['L', 50], ['XL', 40],
            ['X', 10], ['IX', 9], ['V', 5], ['IV', 4], ['I', 1]
        ];
        let result = '';
        for (const [letter, value] of romanNumerals) {
            while (num >= value) {
                result += letter;
                num -= value;
            }
        }
        return result;
    }

    beforeParsed(content) {
        const sectionContent = content.querySelector('#section__content');
        if (!sectionContent) return;

        // Compteurs
        let h1Count = 0;
        let h2Count = 0;
        let h3Count = 0;
        let h4Count = 0;
        let h5Count = 0;
        let h6Count = 0;

        // Parcourir tous les éléments dans l'ordre du document
        const allElements = sectionContent.querySelectorAll('h1, h2, h3, h4, h5, h6');

        allElements.forEach(el => {
            const tagName = el.tagName.toLowerCase();

            switch (tagName) {
                case 'h1':
                    h1Count++;
                    h2Count = 0; // reset h2
                    el.setAttribute('data-counter', this.toUpperAlpha(h1Count));
                    break;

                case 'h2':
                    h2Count++;
                    h3Count = 0; // reset h3
                    el.setAttribute('data-counter', this.toUpperRoman(h2Count));
                    break;

                case 'h3':
                    h3Count++;
                    h4Count = 0; // reset h4
                    el.setAttribute('data-counter', h3Count.toString());
                    break;

                case 'h4':
                    h4Count++;
                    h5Count = 0; // reset h5
                    el.setAttribute('data-counter', this.toLowerAlpha(h4Count));
                    break;

                case 'h5':
                    h5Count++;
                    h6Count = 0; // reset h6
                    const letter = this.toLowerAlpha(h5Count);
                    el.setAttribute('data-counter', letter + letter);
                    break;

                case 'h6':
                    h6Count++;
                    el.setAttribute('data-counter', '(' + h6Count + ')');
                    break;
            }
        });
    }
}


