#!/bin/sh

# Deps: GNU Sed, sdcv (>=0.5.2), jq, xargs, uniq, tail

export STARDICT_DATA_DIR="/srv/www/data/"
export LANG="en_US.UTF-8"
log_dir="/srv/www/logs/"
script_dir="/srv/www/scripts/"

urldecode() { sed 's/^+*//;s/+*$//;s/++*/ /g;s/%/\\x/g' | xargs -0 printf; }

query=$(echo "$QUERY_WORD" | urldecode) 

[ -f "${script_dir}aylant-${QUERY_DICT}.sed" ] &&
			query=$(echo "$query" | "${script_dir}aylant-${QUERY_DICT}.sed")

set_selected() { [ "$QUERY_DICT" = "$1" ] && echo selected; }

last_searches() {
	sed '/^.*\t.*\t\-\t.*$/d;s/^.*\t.*\t\(.*\)\t.*$/<a href=\"\/\1\">\1<\/a> /' \
		"${log_dir}dict-searches.log" | uniq -u -i | tail -24 | urldecode
}

exec_sdcv() {
	if [ -z "$QUERY_DICT" ]
		then sdcv --utf8-input --utf8-output -j -n "$query"
		else sdcv --utf8-input --utf8-output -j -n -x \
			--data-dir "${STARDICT_DATA_DIR}/dic/${QUERY_DICT}" "$query"
	fi
}

parse_result() {
  jq -j -M --arg query "$query" --arg dict "$QUERY_DICT" '
  if length == 0
	then
    "<p>«" + $query + "» sözüne benzer bir söz yok.</p>"
	elif map(select(.word == $query)) | .[0].word == $query
	then
    (map(select(.word == $query)) | .[] | "<h3 class=dict>" +
		.dict + "</h3><p class=definition>" +
		(.definition | sub("^\n";"") | gsub("\n";"<br />") |
		gsub("\t";"&emsp;"))+"</p>") ,  
		(map(select(.word != $query)) | unique_by(.word)
		| .[] | ("<hr /><p>Benzer sözler: <a href=\"/" + .word +
		"/" + $dict + "\">" + .word + "</a></p>")) 
  else
    "<p>«" + $query + "» sözünün aynı bir söz bulunamadı, " +
		"ama ona benzeyen şu sözler var: ",
    (unique_by(.word) | .[] | "<a href=\"/" +
		.word + "/" + $dict + "\">" + .word + "</a> "),"</p>"
  end , "<hr />"'
}

[ -n "$QUERY_DICT" ] &&
[ -f "${script_dir}aylant-${QUERY_DICT}.sed" ] &&
query=$(echo "$query" | "${script_dir}aylant-${QUERY_DICT}.sed")

case "$REQUEST_URI" in
	(/\?q=*) printf "Location: /%s/%s\r\n\r\n" "$query" "$QUERY_DICT" ; exit ;;
	(*) printf "Content-type: text/html\r\n\r\n" ;;
esac

#if exec_sdcv | grep -q -x -F '[]'
#then
#	printf "Status: 404\r\n\r\n"
#elif echo "$REQUEST_URI" | grep -q '^/\?q\=*'
#then
#	printf "Location: /%s/%s\r\n\r\n" "$query" "$QUERY_DICT" ; exit
#else
#	printf "Content-type: text/html\r\n\r\n" 
#fi

cat <<!__EOF__
<!DOCTYPE html>
<html dir="ltr" lang="tr">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="Content-Language" content="tr" />
  <meta content="width=device-width" name="viewport" />
  <meta content="sözlük, nedir, anlam, türkçe, türk, özbekçe,
		uygurca, mana, anlam, anlamı, tatarca, türkmence, kırgızca" name="keywords" />
  <meta content="${query} ne demek, ${query} nedir,
		${query} anlamı, Türk Dilleri Sözlükleri" name="description" />
  <meta content="Arı Duru Türkçe" name="author" />
  <title>ADT - Türk Dilleri Sözlükleri</title>
  <link rel="stylesheet" href="/style.css" type="text/css" media="screen" />
  <link rel="stylesheet" href="/print.css" type="text/css" media="print" />
  <link rel="icon" type="image/png" href="/favicon.png" />
</head>

<body>
<div id="content">
<div id="menuwrap">
	<a id="logo" href="/">
		<img height="57" src="/banner.svg" alt="[Arı Duru Türkçe | Uydurukça değil Türkçe!]">
	</a>
	<div id="menu">
		<ul id="links">
				<li><a href="/" title="Sözlük">Sözlük</a></li>
				<li><a href="/hakkinda.html" title="Yönünde">Hakkında</a></li>
				<li><a href="http://ariduruturkce.org" title="Arı Duru Türkçe">ADT</a></li>
		</ul>
	</div>
	<form id="dict-form" action="/" method="get">
			<input type="text" required placeholder="${query}" name="q" spellcheck="off"
				autocapitalize="off" autocorrect="off" autocomplete="off" id="ara" />
			<input type="submit" value="Ara" />
			<select name="d">
				<option value="">Bütün Sözlükler</option>
				<option $(set_selected adtr) value="adtr">Arı Duru Türkçe Sözlüğü</option>
				<option $(set_selected az) value="az">Azerbaycan Türkçesinin İzahlı Lugatı</option>
				<option $(set_selected aztr) value="aztr">
					Azerbaycan Türkçesinin Anlamdaşlar Sözlüğü</option>
				<option $(set_selected dllr) value="dltr">Divani Lugatit Türk</option>
				<option $(set_selected kbtr) value="kbtr">Karaçay-Malkarca -> Türkiye Türkçesi</option>
				<option $(set_selected krtr) value="krtr">Kırgızca -> Türkiye Türkçesi</option>
				<option $(set_selected saen) value="saen">Sahaca -> İngilizce</option>
				<option $(set_selected tk) value="tk">Türkmen Diliniň Düşündirişli Sözlügi</option>
				<option $(set_selected trad) value="trad">Arı Duru Türkçenin Karşılık Sözlüğü</option>
				<option $(set_selected trta) value="trta">Türkiye Türkçesi -> Tatarca</option>
				<option $(set_selected ugtr) value="ugtr">Uygurca -> Türkiye Türkçesi</option>
				<option $(set_selected uzen) value="uzen">Özbekçe -> İngilizce</option>
			</select>
	</form>
	</div/
</div>
<div id="main">
	<h2 id=word>${query}</h2>
	<div id=dictblock>$(exec_sdcv | parse_result)</div>
	<p>Son arananlar: $(last_searches)</p>
</div>
<hr class="hidden" />
<div id="footwrap">
	<div id="foot">
	</div>
</div>
</div>
</body>

</html>
!__EOF__
