
import { strip_svg } from './svg';

export function post_process_pikchr_svg(svg: string, size?: string) {
	svg = strip_svg(svg);

	// text
	for (const [ color, regex ] of Object.entries(text_regex)) {
		svg = svg.replace(regex, `<text fill="${text_css_vars[color]}"`);
	}

	// shape fill
	for (const [ color, regex ] of Object.entries(shape_fill_regex)) {
		svg = svg.replace(regex, `<path style="fill:${fill_css_vars[color]}`);
	}

	// arrow heads
	for (const [ color, regex ] of Object.entries(arrow_head_regex)) {
		svg = svg.replace(regex, `fill:${line_css_vars[color]}`);
	}

	// lines / boxes
	for (const [ color, regex ] of Object.entries(line_regex)) {
		svg = svg.replace(regex, `stroke:${line_css_vars[color]}`);
	}

	return svg;
}



type CSSVarColor
	= 'black'
	| 'red'
	| 'orange'
	| 'yellow'
	| 'green'
	| 'teal'
	| 'pink'
	| 'purple'
	| 'blue'
	| 'indigo'
	| 'magenta'
	| 'brown'
	;

const text_regex: Record<CSSVarColor, RegExp> = {
	black:   /<text fill="rgb\(0,0,0\)"/gi,
	red:     /<text fill="rgb\(255,0,0\)"/gi,
	orange:  /<text fill="rgb\(255,165,0\)"/gi,
	yellow:  /<text fill="rgb\(255,255,0\)"/gi,
	green:   /<text fill="rgb\(0,128,0\)"/gi,
	teal:    /<text fill="rgb\(0,128,128\)"/gi,
	pink:    /<text fill="rgb\(255,192,203\)"/gi,
	purple:  /<text fill="rgb\(128,0,128\)"/gi,
	blue:    /<text fill="rgb\(0,0,255\)"/gi,
	indigo:  /<text fill="rgb\(75,0,130\)"/gi,
	magenta: /<text fill="rgb\(255,0,255\)"/gi,
	brown:   /<text fill="rgb\(165,42,42\)"/gi,
};

const line_regex: Record<CSSVarColor, RegExp> = {
	black:   /stroke:rgb\(0,0,0\)/gi,
	red:     /stroke:rgb\(255,0,0\)/gi,
	orange:  /stroke:rgb\(255,165,0\)/gi,
	yellow:  /stroke:rgb\(255,255,0\)/gi,
	green:   /stroke:rgb\(0,128,0\)/gi,
	teal:    /stroke:rgb\(0,128,128\)/gi,
	pink:    /stroke:rgb\(255,192,203\)/gi,
	purple:  /stroke:rgb\(128,0,128\)/gi,
	blue:    /stroke:rgb\(0,0,255\)/gi,
	indigo:  /stroke:rgb\(75,0,130\)/gi,
	magenta: /stroke:rgb\(255,0,255\)/gi,
	brown:   /stroke:rgb\(165,42,42\)/gi,
};

const shape_fill_regex = {
	black:    /<path style="fill:rgb\(0,0,0\)/gi,
	red:      /<path style="fill:rgb\(255,0,0\)/gi,
	orange:   /<path style="fill:rgb\(255,165,0\)/gi,
	yellow:   /<path style="fill:rgb\(255,255,0\)/gi,
	green:    /<path style="fill:rgb\(0,128,0\)/gi,
	teal:     /<path style="fill:rgb\(0,128,128\)/gi,
	pink:     /<path style="fill:rgb\(255,192,203\)/gi,
	purple:   /<path style="fill:rgb\(128,0,128\)/gi,
	blue:     /<path style="fill:rgb\(0,0,255\)/gi,
	indigo:   /<path style="fill:rgb\(75,0,130\)/gi,
	magenta:  /<path style="fill:rgb\(255,0,255\)/gi,
	brown:    /<path style="fill:rgb\(165,42,42\)/gi,
}

const arrow_head_regex: Record<CSSVarColor, RegExp> = {
	black:    /fill:rgb\(0,0,0\)/gi,
	red:      /fill:rgb\(255,0,0\)/gi,
	orange:   /fill:rgb:\(255,165,0\)/gi,
	yellow:   /fill:rgb:\(255,255,0\)/gi,
	green:    /fill:rgb:\(0,128,0\)/gi,
	teal:     /fill:rgb:\(0,128,128\)/gi,
	pink:     /fill:rgb:\(255,192,203\)/gi,
	purple:   /fill:rgb:\(128,0,128\)/gi,
	blue:     /fill:rgb:\(0,0,255\)/gi,
	indigo:   /fill:rgb:\(75,0,130\)/gi,
	magenta:  /fill:rgb:\(255,0,255\)/gi,
	brown:    /fill:rgb:\(165,42,42\)/gi,
};

const line_css_vars: Record<CSSVarColor, string> = {
	black:    'var(--theme-line, currentcolor)',
	red:      'var(--theme-chart-shape-red-line, currentcolor)',
	orange:   'var(--theme-chart-shape-orange-line, currentcolor)',
	yellow:   'var(--theme-chart-shape-yellow-line, currentcolor)',
	green:    'var(--theme-chart-shape-green-line, currentcolor)',
	teal:     'var(--theme-chart-shape-teal-line, currentcolor)',
	pink:     'var(--theme-chart-shape-pink-line, currentcolor)',
	purple:   'var(--theme-chart-shape-purple-line, currentcolor)',
	blue:     'var(--theme-chart-shape-blue-line, currentcolor)',
	indigo:   'var(--theme-chart-shape-indigo-line, currentcolor)',
	magenta:  'var(--theme-chart-shape-magenta-line, currentcolor)',
	brown:    'var(--theme-chart-shape-brown-line, currentcolor)',
};

const text_css_vars: Record<CSSVarColor, string> = {
	black:    'var(--theme-text-body, currentcolor)',
	red:      'var(--theme-chart-shape-red-line, currentcolor)',
	orange:   'var(--theme-chart-shape-orange-line, currentcolor)',
	yellow:   'var(--theme-chart-shape-yellow-line, currentcolor)',
	green:    'var(--theme-chart-shape-green-line, currentcolor)',
	teal:     'var(--theme-chart-shape-teal-line, currentcolor)',
	pink:     'var(--theme-chart-shape-pink-line, currentcolor)',
	purple:   'var(--theme-chart-shape-purple-line, currentcolor)',
	blue:     'var(--theme-chart-shape-blue-line, currentcolor)',
	indigo:   'var(--theme-chart-shape-indigo-line, currentcolor)',
	magenta:  'var(--theme-chart-shape-magenta-line, currentcolor)',
	brown:    'var(--theme-chart-shape-brown-line, currentcolor)',
};

const fill_css_vars: Record<CSSVarColor, string> = {
	black:    'var(--theme-bg-heavy, transparent)',
	red:      'var(--theme-chart-shape-red-fill, transparent)',
	orange:   'var(--theme-chart-shape-orange-fill, transparent)',
	yellow:   'var(--theme-chart-shape-yellow-fill, transparent)',
	green:    'var(--theme-chart-shape-green-fill, transparent)',
	teal:     'var(--theme-chart-shape-teal-fill, transparent)',
	pink:     'var(--theme-chart-shape-pink-fill, transparent)',
	purple:   'var(--theme-chart-shape-purple-fill, transparent)',
	blue:     'var(--theme-chart-shape-blue-fill, transparent)',
	indigo:   'var(--theme-chart-shape-indigo-fill, transparent)',
	magenta:  'var(--theme-chart-shape-magenta-fill, transparent)',
	brown:    'var(--theme-chart-shape-brown-fill, transparent)',
};
