#!/bin/bash
# Parameterek: archiv_konyvtar [nyelv [ tesztkonyvtar ] ]
# Az archiv konyvtar tartalma:
#	kezi.kepl
#	eeee-ho-nn alaku konyvtarak, melyek tartalma az elozo futas eredmenye: hufo.smiles hufo.egybe hufo.ido
#	munkakonyvtar (MDIR): archiv_konyvtar/munka. A tartalma torlodik a futas elejen.
#	teszt: ha nem ures, a kemmol.mol, kembot.egybe, hufo.smiles es kemcre.ido fajlt lekerdezes helyett a kapott konyvtarbol veszi
# Idoformatum: %F.%T (pl. 2013-06-23.18:04:29) az egesz csomagban
# Tablazatformatum: | az elvalaszto karakter az egesz csomagban, kiveve, ahol vegyuletnevek (aliasok) vannak.
#	Ott #, mert az aliasban is lehet | a sablonhivasok miatt.

FNEV=`basename $0`
NYELV=${2:-hu}
if [ -z "$3" ]
	then	ELES=true 
	else	ELES=false
		if [ ! -d "$3" ] ; then	echo Nincs tesztkonyvtar: "$3" ; exit 1 ; fi
		TESZTADAT=`realpath "$3"`
fi

#			Parameterellenorzes
if [ ! -d "$1" ] ; then echo Nincs archiv konyvtar: "$1" >&2 ; exit 1 ; fi

ARCH=`realpath $1`	# futas gyokerkonyvtara
KEZI=$ARCH/kezi.kepl	# kezzel megadott nevek es osszegkepletek

if [ ! -r $KEZI ] ; then echo Nincs ilyen  file: $KEZI >&2 ; exit 1 ; fi
MDIR=$ARCH/munka		# munkakonyvtar a futasi adatok szamara
mkdir -p $MDIR
if [ ! -d $MDIR ] ; then echo Nem tudom letrehozni az $MDIR munkakonyvtarat >&2 ; exit 1 ; fi
rm -rf $MDIR/*

#			Az archiv konyvtar ellenorzese
cd $ARCH
function archell() {
	ls -d [2-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9].[0-2][0-9]:[0-5][0-9]:[0-5][0-9] 2>/dev/null | tac | while read SOR
	do	if [ `ls $SOR/hufo.{ido,smiles} $SOR/${NYELV}fo.egybe 2>/dev/null | wc -l`  -eq 3 ] ; then echo $SOR ; break ; fi
	done
}
ELOZO=`archell`
NINCSELOZO=2000-01-01.00:00:00
if [ -z "$ELOZO" ]	# nincs elozo lekerdezes
then	ELOZO=$NINCSELOZO
	rm -rf $ELOZO
	mkdir $ELOZO
	touch $ELOZO/hufo.{egybe,ido,smiles}
fi

#				Most jon a lenyeg

WIKIDEF="https://$NYELV.wikipedia.org/w"

rm -f $ARCH/{eredm,elozo}.lnk	# symlinkek
ln -s $ELOZO $ARCH/elozo.lnk	# symlink az elozo futasra
EREDM=$ARCH/`date '+%F.%T'`	# regebbi legyen, mint a futas kozben valtozott szocikkek
cd $MDIR
if $ELES
	then kemmol $KEZI $NYELV 2>kemmol.wget >kemmol.mol	# molekulalista az utolso modositas idejevel
	else cp -p $TESZTADAT/kemmol.mol .
fi

#			A datumos szocikklista szetvalogatasa kov.

sabldhiv.lua $ELOZO kemmol.mol $ARCH/$ELOZO/${NYELV}fo.egybe $ARCH/$ELOZO/hufo.ido $ARCH/$ELOZO/hufo.smiles
# Bemeno parameterek:
#	ELOZO az elozo futas datuma
#	kemmol.mol a megvaltozott szocikkek listaja
#	hufo.egybe kemia elozo futasanak kimenete: szocikk#vegyuletnev#osszegkeplet
#	hufo.ido: az elozo idofajl (szocikk, letrehozasi ido es szerkeszto, utolso modositas ido es szerkeszto
# Kimenet sabldhiv.* alakban:
#	.mod: a modosult szocikkek listaja
#	.egybe: kembot.egybe nem modosult sorai
#	.ido: kemcre.ido nem modosult sorai
wc -l kemmol.mol sabldhiv.* | head -n -1

#			hufo.egybe es hufo.ido letrehozasa
# A modosult szocikkek lekerdezese
if $ELES 
then	kembot sabldhiv.mod "$WIKIDEF" >kembot.egybe &
	kemcre sabldhiv.mod "$WIKIDEF" >kemcre.ido 2>kemcre.wget &
	wait
else	sed -e 's/^/^/' -e 's/$/#/' sabldhiv.mod >ins.sed
	grep -f ins.sed $TESZTADAT/kembot.egybe >kembot.egybe
	sed -e 's/^/^/' -e 's/$/|/' sabldhiv.mod >ins.sed
	grep -f ins.sed $TESZTADAT/kemcre.ido >kemcre.ido
fi
# hufo.egybe letrehozasa
alihtml kembot.egybe >ins.egybe
#cat kembot.egybe sabldhiv.egybe >ins.egybe
cat sabldhiv.egybe >>ins.egybe
kezikepl.lua ins.egybe $KEZI >ins.kezi
wc -l ins.kezi

. utf8
if [ $NYELV = en ] ; then unset LC_ALL ; export LC_TIME=C ; fi

#kemrend ins.kezi | sort -t '#' -k2,2 -k1,1 | tee kemrend.tmp | sed 's/^[^#]*#[^#]*#//' | tee hufo.egybe | logcut -d '#' -D '|' -f 1,3 >hufo.kepl
#wc -l hufo.egybe hufo.kepl | head -n -1
kemrend ins.kezi | sort -t '#' -k2,2 -k1,1 | tee kemrend.tmp | sed 's/^[^#]*#[^#]*#//' >hufo.egybe
wc -l hufo.egybe
#awk -F '#' '{if($2 != $1 && $2 != "") print $1 "|" $2;}' hufo.egybe >hufo.ali

# A letrehozas es utolso modositas
sort -t '|' -k4 kemcre.ido sabldhiv.ido >hufo.ido

#			SMILES-ok
cat kembot.smiles sabldhiv.smiles >hufo.smiles

#			Ellenorzesek
echo
echo Osszefesules es rendezes utan:
#wc -l hufo.{kepl,ido,ali} | head -n -1 
wc -l hufo.{egybe,ido} | head -n -1 

SZAM=`logcut -d '#' hufo.egybe -f 1 | sort -u | wc -l`
MOLSZAM=`wc -l <kemmol.mol`
if [ $MOLSZAM != $SZAM ]
then	echo hufo.egybe szocikkeinek szama $MOLSZAM kellene legyen, ehelyett $SZAM
	exit 1
fi
SZAM=`wc -l <hufo.ido`
if [ $MOLSZAM != $SZAM ]
then	echo hufo.ido sorainak szama $MOLSZAM kellene legyen, ehelyett $SZAM
	exit 1
fi

if [ $ELOZO != $NINCSELOZO ]
then	REGSZAM=`logcut -d '#' -f 1 $ARCH/$ELOZO/${NYELV}fo.egybe | sort -u | wc -l`
	echo Az elozo "($ELOZO)" molekulaszam: $REGSZAM
	SZAM=`logcut -d '#' -f 1 hufo.egybe | sort -u | wc -l`
	if [ $SZAM -lt $REGSZAM ]
	then	echo Az elozo lekerdezeskor $REGSZAM kemiai szocikk volt, most csak $SZAM
		exit 1
	fi
	REGSZAM=`grep -c '#.*=' $ARCH/$ELOZO/${NYELV}fo.egybe`
	SZAM=`grep -c '#.*=' hufo.egybe`
	if [ $SZAM -lt $REGSZAM ]
	then	echo Az elozo lekerdezeskor $REGSZAM osszegkeplet volt, most csak $SZAM
		exit 1
	fi
	echo Osszegkepletszam: $SZAM. Regi "($ELOZO)": $REGSZAM

	echo
	echo A regi es uj kepletfajl kulonbsegei:
	echo ------------------------------------
	diff -y --suppress-common-lines $ARCH/$ELOZO/${NYELV}fo.egybe hufo.egybe
fi
kemeredm $ARCH $NYELV `basename $EREDM`
exit 0

#			Az eredmenyek kiirasa
mkdir -p $EREDM					# eredmenykonytar
ln -s $EREDM $ARCH/eredm.lnk			# symlink ra
cp -p hufo.{ido,smiles} kemmol.mol kembot.egybe kemcre.ido $EREDM/
cp -p hufo.egybe $EREDM/${NYELV}fo.egybe
#cp -p hufo.{kepl,ido,smiles} kemmol.mol kembot.egybe kemcre.ido $EREDM/
#alihtml hufo.ali >$EREDM/hufo.ali
#alihtml hufo.egybe >$EREDM/${NYELV}fo.egybe
kemcrehtm hufo.ido hufo.egybe $NYELV >$EREDM/kemcre.wiki	# ez megdolgoztatja a processzort
kemstat $NYELV >$EREDM/kemstat.wiki
exit 0
