const { translate, print, pureWithoutTitle } = require('../eazax/editor-main-util');
const ConfigManager = require('../common/config-manager');

/** 图标葨 */
const ICON_MAP = {
    'scene': 'πŸ”₯',
    'prefab': 'πŸ’ ',
    'node': '🎲',
    'component': '🧩',
    'property': 'πŸ“„',
    'asset': 'πŸ“¦',
    'asset-info': 'πŸ“‹',
    'node-refs': 'πŸ“™',
    'asset-refs': 'πŸ“—',
};

/**
 * ζ‰“ε°ζœΊ
 */
const Printer = {

    /**
     * ζ‰“ε°η»“ζžœθ‡³ζŽ§εˆΆε°
     * @param {object} result 
     */
    printResult(result) {
        if (!result) {
            return;
        }
        const { printDetails, printFolding } = ConfigManager.get();
        // 标志位
        const nodeRefs = [], assetRefs = [];
        let nodeRefsCount = 0, assetRefsCount = 0;
        // ιεŽ†εΌ•η”¨δΏ‘ζ―
        for (let refs = result.refs, i = 0, l = refs.length; i < l; i++) {
            const ref = refs[i],
                type = ref.type,
                url = ref.url.replace('db://', '').replace('.meta', '');
            if (type === 'scene' || type === 'prefab') {
                // εœΊζ™―ζˆ–ι’„εˆΆδ½“
                nodeRefs.push(`γ€€γ€€${ICON_MAP[type]} [${translate(type)}] ${url}`);
                // θŠ‚η‚ΉεΌ•η”¨
                for (let details = ref.refs, j = 0, l = details.length; j < l; j++) {
                    nodeRefsCount++;
                    // θ―¦ζƒ…
                    if (printDetails) {
                        const detail = details[j];
                        let item = `γ€€γ€€γ€€γ€€${ICON_MAP['node']} [${translate('node')}] ${detail.node}`;
                        if (detail.component) {
                            item += ` γ€€β†’ γ€€${ICON_MAP['component']} [${translate('component')}] ${detail.component}`;
                        }
                        if (detail.property) {
                            item += ` γ€€β†’ γ€€${ICON_MAP['property']} [${translate('property')}] ${detail.property}`;
                        }
                        nodeRefs.push(item);
                    }
                }
            } else {
                // 衄源引用
                assetRefsCount++;
                assetRefs.push(`γ€€γ€€${ICON_MAP['asset']} [${translate(type)}] ${url}`);
            }
        }
        // η»„θ£…ζ–‡ζœ¬
        const texts = [];
        // εˆ†ε‰²ηΊΏ
        texts.push(`${'- - '.repeat(36)}`);
        // εŸΊη‘€δΏ‘ζ―
        texts.push(`${ICON_MAP['asset-info']} ${translate('asset-info')}`);
        texts.push(`γ€€γ€€- ${translate('asset-type')}${result.type}`);
        texts.push(`γ€€γ€€- ${translate('asset-uuid')}${result.uuid}`);
        texts.push(`γ€€γ€€- ${translate('asset-url')}${result.url}`);
        texts.push(`γ€€γ€€- ${translate('asset-path')}${result.path}`);
        // εˆ†ε‰²ηΊΏ
        texts.push(`${'- - '.repeat(36)}`);
        // θŠ‚η‚ΉεΌ•η”¨
        if (nodeRefs.length > 0) {
            texts.push(`${ICON_MAP['node-refs']} ${translate('node-refs')} x ${nodeRefsCount}`);
            for (let i = 0, l = nodeRefs.length; i < l; i++) {
                texts.push(nodeRefs[i]);
            }
        }
        // 衄源引用
        if (assetRefs.length > 0) {
            texts.push(`${ICON_MAP['asset-refs']} ${translate('asset-refs')} x ${assetRefsCount}`);
            for (let i = 0, l = assetRefs.length; i < l; i++) {
                texts.push(assetRefs[i]);
            }
        }
        // η»“ε°Ύεˆ†ε‰²ηΊΏ
        texts.push(`${'- - '.repeat(36)}`);
        // ζ‰“ε°εˆ°ζŽ§εˆΆε°
        if (printFolding) {
            // ε•θ‘Œζ‰“ε°
            texts.unshift(`πŸ—‚ ${translate('result')} >>>`);
            print('log', texts.join('\n'));
        } else {
            // ι€θ‘Œζ‰“ε°
            print('log', translate('result'));
            for (let i = 0, l = texts.length; i < l; i++) {
                pureWithoutTitle(`γ€€γ€€${texts[i]}`);
            }
        }
    },

};

module.exports = Printer;