#!/bin/bash
#
#FilterMonitorRestore ver1.1.1
#
# usage: 
#	 FilterMonitorRestore callfunc infile tracelevel
#
# Description: 
#	 Restore the setting for FilterMonitorDetect
#
#Copyright (C) 2012 NEC Corporation.
#If you tamper with the source, the behavior of the FilterMonitor is not guaranteed.
############################################################################################################
. $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorUsage
. $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorCommonFunc

SettingPath=/etc/FilterMonitor
funcname=FilterMonitorRestore

callfunc=$1
infile=$2
tracelevel=$3

settingfile=$PATHPREFIX/$SettingPath/FilterMonitorSetting
settingtmpfile=/tmp/`basename ${infile}`.new
sensorfile=""
sensortmpfile=""
cronfile=$PATHPREFIX/etc/cron.d/FilterMonitor
crontmpfile=/tmp/FilterMonitor
cronflagfile=$PATHPREFIX/$SettingPath/FilterMonitorCronFlag

ShowAlert()
{
    echo "Internal error occurs. Please contact to customer service for the support."
    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog syslog $funcname ERR $tracelevel $callfunc "failed to access file"
    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname ERR $tracelevel $callfunc "$failed to access file"
}

Finalize()
{
    rm -f $settingtmpfile 2> /dev/null
    for (( i = 0 ; i < ${#sensortmpfile[*]} ; i++ ))
    {
        rm -f ${sensortmpfile[i]} 2> /dev/null
    }

    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "$funcname end"

    exit $1
}

$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "$funcname start"

if [ $# -lt 2 ]
then
    FilterMonitorUsage
    Finalize 1
fi

OLDIFS=$IFS

HourVal=0
MinuteVal=0
IntervalVal=0
DayOfWeek1Val=0
DayOfWeek2Val=0
# HighBall-S
#HWID=""
SKU=""
# HighBall-E
SensorNumber=""
RefVal=0

export	IFS=","
read -a Setting < $PATHPREFIX/$SettingPath/FilterMonitorSetting

if [ ${#Setting[*]} -lt 13 ]
then
    ShowAlert
    Finalize 2
fi

if [ ! -f $infile ]
then
    echo -e "$infile is not exist. Please enter the correct name of the file."
    Finalize 3
fi

if [ ! -r $infile ]
then
    ShowAlert
    Finalize 3
fi

lineno=0
while IFS="," read -a ReadLine ; do
{
    if [ $lineno -eq 0 ]
    then
	if [ ${#ReadLine[*]} -lt 6 ]
	then
	    ShowAlert
	    Finalize 4
	fi

	HourVal=${ReadLine[1]}
	MinuteVal=${ReadLine[2]}
	IntervalVal=${ReadLine[3]}
	DayofWeek1Val=${ReadLine[4]}
	DayofWeek2Val=${ReadLine[5]}

	NUMERIC_CHECK=`expr "$HourVal" : '\([0-2][0-9]\)$'`
	if [ -z $NUMERIC_CHECK ]
	then
	    echo "File format is invalid"
	    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "[hour] is invalid"
	    Finalize 5
	fi

	NUMERIC_CHECK=`expr "$MinuteVal" : '\([0-5][0-9]\)$'`
	if [ -z $NUMERIC_CHECK ]
	then
	    echo "File format is invalid"
	    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "[minute] is invalid"
	    Finalize 6
	fi

	NUMERIC_CHECK=`expr "$IntervalVal" : '\([0-4]\)$'`
	if [ -z $NUMERIC_CHECK ]
	then
	    echo "File format is invalid"
	    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "[interval] is invalid"
	    Finalize 7
	fi

	NUMERIC_CHECK=`expr "$DayofWeek1Val" : '\([0-7]\)$'`
	if [ -z $NUMERIC_CHECK ]
	then
	    echo "File format is invalid"
	    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "[interval] is invalid"
	    Finalize 8
	fi

	NUMERIC_CHECK=`expr "$DayofWeek2Val" : '\([0-7]\)$'`
	if [ -z $NUMERIC_CHECK ]
	then
	    echo "File format is invalid"
	    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "[interval] is invalid"
	    Finalize 9
	fi

	Setting[8]=$HourVal
	Setting[9]=$MinuteVal
	Setting[10]=$IntervalVal
	Setting[11]=$DayofWeek1Val
	Setting[12]=$DayofWeek2Val

	echo -n "${Setting[0]}" > $settingtmpfile
	for (( i = 1 ; i < ${#Setting[*]} ; i++ ))
	{
	    echo -n ",${Setting[i]}" >> $settingtmpfile
	}
	echo "" >> $settingtmpfile
    else
	if [ ${#ReadLine[*]} -lt 3 ]
	then
	    ShowAlert
	    Finalize 10
	fi

# HighBall-S
#	HWID=${ReadLine[0]}
	SKU=${ReadLine[0]}
# HighBall-E
	SensorNumber=${ReadLine[1]}
	RefVal=${ReadLine[2]}

# HighBall-S
#	sensorfile=$PATHPREFIX/$SettingPath/${HWID}_${SensorNumber}_Setting
#	sensortmpfile[$((lineno - 1))]=/tmp/${HWID}_${SensorNumber}_Setting
	sensorfile=$PATHPREFIX/$SettingPath/${SKU}_${SensorNumber}_Setting
	sensortmpfile[$((lineno - 1))]=/tmp/${SKU}_${SensorNumber}_Setting
# HighBall-E

	if [ ! -r $sensorfile ]
	then
	    echo "Sensor ID is invalid"
	    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "[SensorID] is invalid"
	    Finalize 11
	fi

	read -a SensorSetting < $sensorfile
	if [ ${#SensorSetting[*]} -lt 6 ]
	then
	    ShowAlert
	    Finalize 12
	fi

	SensorSetting[2]=$RefVal

	echo -n ${SensorSetting[0]} > ${sensortmpfile[$((lineno - 1))]}
	for (( i = 1 ; i < ${#SensorSetting[*]} ; i++ ))
	{
	    echo -n ",${SensorSetting[i]}" >> ${sensortmpfile[$((lineno - 1))]}
	}
	echo "" >> ${sensortmpfile[$((lineno - 1))]}
    fi
    lineno=$((lineno + 1))
}; done < $infile

#make crontab file
$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorSetCron $HourVal $MinuteVal $IntervalVal $DayofWeek1Val $DayofWeek2Val

if [ $? -ne 0 ]
then
    echo -e "The initialization failed. The installation of Filter Replacement Sensor has troubles or the sensor may be broken. Please contact to customer service for the support."
    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog syslog $funcname INFO $tracelevel $callfunc "${msg[16]}"
    $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "$funcname Writing Reference time failed to common setting file"
    Finalize 13
fi

#fix to setting directory
mv -f $settingtmpfile $settingfile
if [ $? -ne 0 ]
then
    echo "Restoring file failed."
    Finalize 14
fi
for (( i = 0 ; i < ${#sensortmpfile[*]} ; i++ ))
{
    if [ -n ${sensortmpfile[i]} ]
    then
	mv -f ${sensortmpfile[i]} $PATHPREFIX/$SettingPath/
	if [ $? -ne 0 ]
	then
	    echo "Restoring file failed."
	    Finalize 15
	fi
    fi
}

echo -e "Setting was restored."
Finalize 0
