import fs from 'fs-extra';
import path from 'path';
import { getCodeString } from 'rehype-rewrite';
import { getSVGNode, ICONS_PATH } from './getSVGNode.mjs';

const resultHomeCard = {};
const COLOR_REG = /background:(\s+)?rgb\(([\d]+\s+[\d]+\s+[\d]+(\s+)?)\);?/gi;

export function homeCardIcons(node, parent, isHome) {
  if (
    isHome &&
    node &&
    node.type === 'element' &&
    (node.properties?.class || node.properties?.className)?.includes('contributing')
  ) {
    const info = node.properties['data-info'];
    if (!info) {
      node.properties['data-info'] = '👆待完善需要您的参与';
    }
  }
  if (
    isHome &&
    node &&
    node.type === 'element' &&
    (node.properties?.class || node.properties?.className)?.includes('home-card')
  ) {
    node.children = node.children.map((child) => {
      const href = child.properties?.href;
      if (href && href.endsWith('.md')) {
        const iconName = path.basename(href, '.md');
        const iconPath = path.resolve(ICONS_PATH, `${iconName}.svg`);
        const iconDefaultPath = path.resolve(ICONS_PATH, `list.svg`);
        const iconExist = fs.existsSync(iconPath);
        let color = '';
        child.properties.style = child.properties.style.replace(COLOR_REG, (str) => {
          color = str.replace(COLOR_REG, '$2');
          return str.replace(/(\);)/, '/ var(--bg-opacity)$1');
        });
        const tags = child.properties['data-lang'];
        const labelNode = {
          type: 'element',
          tagName: 'span',
          children: child.children,
        };
        const title = getCodeString(child.children);
        if (iconExist) {
          const svgNode = getSVGNode(iconPath);
          child.children = [...svgNode, labelNode];
        } else {
          const svgNode = getSVGNode(iconDefaultPath);
          child.children = [...svgNode, labelNode];
        }
        resultHomeCard[iconName] = {
          md: iconName,
          title: title,
          rgb: color,
          tags: tags ? tags.split('/') : [],
        };
      }
      return child;
    });
  }
  return resultHomeCard;
}