#!/bin/sh
# vi: ts=4 sw=4

set -e

#require fsub gawk pee sponge

PATH="$PATH:scripts"

rm -rf out/*
mkdir -p out
cp -r src/* out
[ -d fonts ] && cp -r fonts out

compile_for_lang() {
	sd=src/$1
	od=out/$1

	case $lang in
	en) hlang=en-US ;;
	pt) hlang=pt-BR ;;
	*)  hlang=$1 ;;
	esac

	xfsub '<!-- LANG-SELECTOR -->' src/language-selector.html \
	                               $od/nav-bar.html
	sed -i "\\.<a href=/$1XYZ>.d" $od/nav-bar.html

	mkdir $od/changelog
	changelog-dates.sed out/changelog.html >$od/changelog/index.html

	find $od -name '*.html'                                                     \
		| pee cat "xargs -- sed -i '
			  s|href=/XX|href=/$1|
			  s|<html lang=XX>|<html lang=$1>|
		  '"                                                                    \
		| while read file; do
			  xfsub '<!-- NAV-BAR -->'        $od/nav-bar.html             $file
			  xfsub '<!-- COIN-NAV -->'       $od/euro/coin-nav.html       $file
			  xfsub '<!-- NOTE-NAV -->'       $od/euro/note-nav.html       $file
			  xfsub '<!-- COIN-DENOM-NAV -->' $od/euro/coin-denom-nav.html $file
			  xfsub '<!-- FOOTER -->'         $od/footer.html              $file
			  xfsub '<!-- TABLE-KEY -->'      $od/table-key.html           $file
		  done

	for file in `find $od -name 'index.html'`; do
		base=${file#out}
		base=${base%/index.html}
		sed -Ei "
			/<nav>/,\\|</nav>|s|<a href=$base>([^<]*)</a>|<div class=selected>\1</div>|
		" $file
	done

	sed -Ei '
		/<!-- IF-COINS -->/,/<!-- FI-COINS -->/d
		/<!-- (IF|FI)-NOTES -->/d
	' $od/euro/notes.template.html $od/euro/tnotes.template.html
	sed -Ei '
		/<!-- IF-NOTES -->/,/<!-- FI-NOTES -->/d
		/<!-- (IF|FI)-COINS -->/d
	' $od/euro/coins.template.html $od/euro/coins-denom.template.html

	nod=$od/euro/tn
	mkdir -p $nod
	cp $od/euro/tnotes.template.html $nod/index.html
	sed -Ei '
		/<nav>/,\|</nav>|s|<a href=/../euro/tn>([^<]*)</a>|<div class=selected>\1</div>|
	' $nod/index.html
	gawk -v denom=$denom -v lang=$1 '
		@include "scripts/getcls.awk"

		function fmt(n)
		{
			return lang ~ /(en|ga|mt|nl)/ ? "€" n : n " €"
		}

		$1 == "TN" {
			i++
			col[i][0] = $2
			col[i][1] = $3
			col[i][2] = $4
		}

		END {
			for (i = 1; i <= length(col); i++) {
				printf \
					"<tr><td class=missing>%s</td><td class=%s>%s</td></tr>\n",
					fmt(col[i][0]), getcls(col[i][2]), col[i][1]
			}
		}
	' data/notes | xfsub '<!-- TABLE-BODY -->' - $nod/index.html

	for CC in `grep -Eo '^[A-Z]{2}' data/coins | uniq`; do
		cc=`echo $CC | tr A-Z a-z`
		nod=$od/euro/$cc
		mkdir -p $nod
		cp $od/euro/coins.template.html $nod/index.html
		sed -i "
			/<nav>/,\\|</nav>|s|<a href=/../euro/$cc>$CC</a>|<div class=selected>$CC</div>|
		" $nod/index.html
		grep -m1 "^$CC" data/country-info.$1                                    \
			| cut -f2                                                           \
			| xfsub '<!-- DEMON -->' - $nod/index.html
		sed -Ei "
			/<!-- (IF|FI)-$CC -->/d
			/<!-- IF-!$CC -->/,/<!-- FI-!$CC -->/d
			/<!-- (IF|FI)-![A-Z]+ -->/d
			/<!-- IF-[A-Z]+ -->/,/<!-- FI-[A-Z]+ -->/d
		" $nod/index.html

		gawk -v CC=$CC '
			@include "scripts/getcls.awk"

			$1 == CC && /.. start/ {
				sub(/.. start/, "")
				printf "<tr class=new-design><th colspan=8>%s</th></tr>\n", $0
				next
			}

			$1 == CC {
				y = $10
				if ($11 != "")
					y_ = $11
				printf "<trX>"
				for (i = 2; i <= 9; i++) {
					# Greece 2002 needs special handling
					if (CC == "GR" && $10 == 2002 && $11 == "MM") {
						if (i <= 5)
							y_ = "F"
						else if (i <= 7)
							y_ = "E"
						else
							y_ = "S"
					}

					if ($11 != "") {
						printf "<td class=%s>%s <sup>%s</sup></td>",
						       getcls($i), y, y_
					} else
						printf "<td class=%s>%s</td>", getcls($i), y
				}
				print "</tr>"
			}

			END { print "MARKER LOL" }
		' data/coins                                                                          \
			| last-of-design.sed                                                              \
			| sed -E 's|(<td class=not-minted>)[^<]*(<sup>[^<]*</sup>)?(</td>)|\1\&nbsp;\3|g' \
			| xfsub '<!-- SCOIN-TABLE-BODY -->' - $nod/index.html

		gawk -v CC=$CC '
			@include "scripts/getcls.awk"

			$1 == CC {
				split($0, a, "\t")
				$0 = a[1]

				n = 2
				y = $2

				if (getcls($3) == "error") {
					n = 3
					printf "<tr><td class=missing>%s <sup>%s</sup></td>", y, $3
				} else
					printf "<tr><td class=missing>%s</td>", y

				for (i = 1; i <= NF - n; i++) {
					printf "<td colspan=Y class=%s>%s</td>",
					       getcls($(i + n)), a[i + 1]
			   }
				print "</tr>"
			}

			END { print "MARKER LOL" }
		' data/ccs                                                              \
			| colspan.sed                                                       \
			| grep -Fv 'MARKER LOL'                                             \
			| xfsub '<!-- CCOIN-TABLE-BODY -->' - $nod/index.html
	done

	for denom in `grep -Eo '^[0-9]+' data/notes | uniq`; do
		nod=$od/euro/${denom}e
		mkdir -p $nod
		cp $od/euro/notes.template.html $nod/index.html
		sed -Ei "
			/<nav>/,\\|</nav>|s|<a href=/../euro/${denom}e>([^<]*)</a>|<div class=selected>\\1</div>|
		" $nod/index.html
		sed -i "s/<!-- DENOM -->/$denom/" $nod/index.html

		sed -Ei "
			/<!-- (IF|FI)-$denom -->/d
			/<!-- IF-!$denom -->/,/<!-- FI-!$denom -->/d
			/<!-- (IF|FI)-![0-9]+ -->/d
			/<!-- IF-[0-9]+ -->/,/<!-- FI-[0-9]+ -->/d
		" $nod/index.html

		gawk -v denom=$denom -v lang=$1 '
			@include "scripts/getcls.awk"

			BEGIN { FS = "\t" }

			FILENAME == "data/country-info." lang { cc2name[$1] = $3 }

			FILENAME == "data/note-info" && length == 0  { section++; next }
			FILENAME == "data/note-info" && section == 0 { cc2c[$1] = $2 }
			FILENAME == "data/note-info" && section == 1 { ab2l[$1] = $2 }

			FILENAME == "data/notes" && $1 == denom && $2 == "2002" {
				i++
				col[i][0] = $3
				col[i][1] = $4
			}

			END {
				for (i = 1; i <= 3; i++) {
					if (i == 3 && denom == 5) {
						print "</tr>"
						break
					}
					if (i == 1)
						sig = "Wim Duisenberg"
					else if (i == 2)
						sig = "Jean-Claude Trichet"
					else if (i == 3)
						sig = "Mario Draghi"
					print "<tr class=new-design><th colspan=12>"sig"</th></tr>"

					c = 0
					for (j = 1; j <= length(col); j++) {
						split(col[j][1], s, " ")
						if (s[i] == "/")
							continue

						if (c % 4 == 0)
							printf "<trX>"

						printf "<td colspan=X class=%s>", getcls(s[i])
						printf "%s (%s)", cc2name[col[j][0]], cc2c[col[j][0]]
						printf "</td>"

						if (c % 4 == 3 && j < length(col))
							print "</tr>"
						c++
					}
					if ((c - 1) % 4 != 3)
						print "</tr>"
				}
				print "MARKER LOL"
			}
		' data/country-info.$1 data/note-info data/notes                        \
			| colspan.sed                                                       \
			| last-of-design.sed                                                \
			| xfsub '<!-- 2002-TABLE-BODY -->' - $nod/index.html

		[ $denom -eq 500 ] && continue

		gawk -v denom=$denom -v lang=$1 '
			@include "scripts/getcls.awk"

			BEGIN { FS = "\t" }

			FILENAME == "data/country-info." lang { cc2name[$1] = $3 }

			FILENAME == "data/note-info" && length == 0  { section++; next }
			FILENAME == "data/note-info" && section == 0 { cc2c[$1] = $2 }
			FILENAME == "data/note-info" && section == 1 { ab2l[$1] = $2 }

			FILENAME == "data/notes" && $1 == denom && $2 == "Europa" {
				i++
				col[i][0] = $3
				col[i][1] = $4
			}

			END {
				for (i = 1; i <= 2; i++) {
					if (i == 1)
						sig = "Mario Draghi"
					else if (i == 2)
						sig = "Christine Lagarde"
					print "<tr class=new-design><th colspan=12>"sig"</th></tr>"

					c = 0
					for (j = 1; j <= length(col); j++) {
						split(col[j][1], s, " ")
						if (s[i] == "/")
							continue

						if (c % 4 == 0)
							printf "<trX>"

						printf "<td colspan=X class=%s>", getcls(s[i])
						printf "%s (%s)", cc2name[col[j][0]], cc2c[col[j][0]]
						printf "</td>"

						if (c % 4 == 3 && j < length(col))
							print "</tr>"
						c++
					}
					if ((c - 1) % 4 != 3)
						print "</tr>"
				}
				print "MARKER LOL"
			}
		' data/country-info.$lang data/note-info data/notes                     \
			| colspan.sed                                                       \
			| last-of-design.sed                                                \
			| xfsub '<!-- EUROPA-TABLE-BODY -->' - $nod/index.html
	done

	# We will need this later…
	{ for CC in `grep -Eo '^[A-Z]{2}' data/coins | uniq`; do
		grep "^$CC	" data/country-info.$1 | cut -f1,3
	done } | sort -k2 >data/tmp-data.$1


	for denom in 1 2 5 10 20 50 100 200; do
		if [ $denom -eq 100 -o $denom -eq 200 ]; then
			denom_=${denom%00}e
		else
			denom_=${denom}c
		fi
		nod=$od/euro/$denom_
		mkdir -p $nod
		cp $od/euro/coins-denom.template.html $nod/index.html
		sed -Ei "
			/<nav>/,\\|</nav>|s|<a href=/../euro/${denom_}>([^<]*)</a>|<div class=selected>\\1</div>|
		" $nod/index.html
		if [ $denom -eq 100 -o $denom -eq 200 ]; then
			sed -i "s/<!-- DENOM -->/${denom%00}.00/" $nod/index.html
		else
			sed -i "s/<!-- DENOM -->/0.`printf '%02d' $denom`/" $nod/index.html
		fi

		for CC in `cut -f1 data/tmp-data.$1`; do
			gawk -v CC=$CC -v lang=$1 -v denom=$denom '
				@include "scripts/getcls.awk"

				FILENAME ~ /data\/tmp-data\.[a-z]{2}/ && $1 == CC {
					gsub(/^.../, "")
					print "<section class=\"cl-section slant-down\">"
					print "<div>"
					print "<table class=coin-table cellspacing=0>"
					print "<thead><tr><th>" $0 "</th></tr></thead>"
					print "<tbody>"
				}

				$1 == CC && /.. start/ {
					sub(/.. start/, "")
					printf "<tr class=new-design><th>%s</th></tr>\n", $0
					next
				}

				$1 == CC {
					y = $10
					if ($11 != "")
						y_ = $11
					printf "<trX>"

					     if (denom ==   1) i = 2
					else if (denom ==   2) i = 3
					else if (denom ==   5) i = 4
					else if (denom ==  10) i = 5
					else if (denom ==  20) i = 6
					else if (denom ==  50) i = 7
					else if (denom == 100) i = 8
					else if (denom == 200) i = 9

					# Greece 2002 needs special handling
					if (CC == "GR" && $10 == 2002 && $11 == "MM") {
						if (i <= 5)
							y_ = "F"
						else if (i <= 7)
							y_ = "E"
						else
							y_ = "S"
					}

					if ($i != "/") {
						if ($11 != "") {
							printf "<td class=%s>%s <sup>%s</sup></td>",
								   getcls($i), y, y_
						} else
							printf "<td class=%s>%s</td>", getcls($i), y
					}
					print "</tr>"
				}

				END {
					print "MARKER LOL"
					print "</tbody></table></div></section>"
					print "MARKER LMAO"
				}
			' data/tmp-data.$1 data/coins                                                  \
				| last-of-design.sed                                                       \
				| sed -E 's|(<td class=not-minted>)[^<]*(<sup>[^<]*</sup>)?(</td>)|\1\3|g' \
				| fsub '<!-- DENOM-TABLE -->' - $nod/index.html                            \
				| sed 's/MARKER LMAO/<!-- DENOM-TABLE -->/'                                \
				| sponge $nod/index.html
		done
	done

	for file in `find $od -name '*.html'`; do
		path=${file#out/??}
		path=${path%/*.html}
		sed -Ei "s|href=/(..)XYZ>|href=/\1$path>|" $file
	done
}

for lang in `find out -mindepth 1 -maxdepth 1 -name '??' -printf '%f\n'`; do
	compile_for_lang $lang &
done
wait

find out -name '*.html' -and -not -name 'index.html' -delete
rm data/tmp-data.??

cp -r out/* done