#!/bin/bash
CFGFILE=/etc/opt/sshbuk/sshbuk.vars
#CFGFILE=/root/sshbuk/sshbuk.vars
#CFGFILE=$HOME/sshbuk/sshbuk.vars
## настройки по-умолчанию (можно переопределить ключами в ком. строке)
DELTA_MAX=5
DBLOCALUSER="bukts"
DBLOCALNAME="gsin"

show_help() {
    echo 
};

#load_all_to_db() {
#    for ftyp in "d" "dj" "j"; do
#        for i in $(ls $ftyp.*.tar.bz2 2>/dev/null); do
#            if [ -z "$i" -o ! -f "$i" ]; then
#                continue
#            fi
#            file2bukdb -db $1 -user $2 -f $i > /dev/null 2>/dev/null
#            if [ $? -ne 0 ]; then
#                ERRS=$ERRS"Ошибка загрузки данных из файла $i;"
#            fi
#        done
#    done
#}



if [ -f $CFGFILE ]; then
    . $CFGFILE
else
    echo "Не найден файл \"$CFGFILE\"" >& 2
    exit -1
fi

if [ -f $BINDIR/sshbuk.fn ]; then
    . $BINDIR/sshbuk.fn
else
    echo "Не найден файл \"sshbuk.fn\"" >& 2
    exit -1
fi

fn_make_log $LOGDIR
fn_to_log ""
fn_to_log "$(date +%H:%M:%S) $(basename $0) \"$@\""

## анализ командной строки
## задаются -db -user -list -max
fn_command_line "$@"
AZS=$cml_azs
IP=$cml_ipadr
if [ ! -z "$cml_user" ]; then
    DBLOCALUSER=$cml_user;  
fi
if [ ! -z "$cml_db" ]; then
    DBLOCALNAME=$cml_db
fi
if [ ! -z "$cml_list_file" ]; then
    AZSLIST=$cml_list_file
fi
if [ ! -z "$cml_max" ]; then
    DELTA_MAX=$cml_max;
fi

if [ ! -f "$AZSLIST" ]; then
    echo "Не найден $AZSLIST"
    exit -1
fi

ERRS=

if [ ! -z "$IP" ]; then
    AZSS=$(echo $IP | sed -e "s/,/ /")
elif [ ! -z "$AZS" ]; then
    AZSS=$(echo $AZS | sed -e "s/,/ /")
else
    AZSS=$(cat $AZSLIST | cut -d';' -f1)
fi
if [ "$cml_debug" == "yes" ]; then
    echo "AZSS=$AZSS"
fi

pushd $DATADIR > /dev/null

TARFILES=
for azs in $AZSS; do

    if [ ! -z "$IP" ]; then
        KEY="-ip"
    else
        KEY="-a"
    fi
    if [ "$cml_debug" == "yes" ]; then
        echo "key=$KEY $azs"
    fi
    $BINDIR/ldsshbuk $KEY $azs -sh cur
    if [ $? -ne 0 ]; then
        ERRS=$ERRS"Ошибка загрузки текущей смены с АЗС $azs;"
        continue
    fi
    TARFILE="j.$azs.cur.tar.bz2"
    if [ ! -f "$TARFILE" ]; then
        ERRS=$ERRS"Ошибка загрузки текущей смены с АЗС $azs: нет файла с данными;"
        continue
    fi
    TARFILES=${TARFILES}${TARFILE}" "
    TMPDIR=$(pwd)/tmp.$(date "+%y%m%d%H%M%S").$(basename $TARFILE ".tar.bz2")
    if [ -d "$TMPDIR" ]; then
        rm -r "$TMPDIR"
    fi
    mkdir -p $TMPDIR
    pushd $TMPDIR > /dev/null
    tar --bzip2 -xf $DATADIR/$TARFILE
    FILE=$(ls j.$azs.*sql 2>/dev/null)
    if [ "$cml_debug" == "yes" ]; then
        echo file=$FILE
    fi
    if [ -z "$FILE" -o ! -f "$FILE" ]; then
        popd > /dev/null
        rm -r "$TMPDIR" 2>/dev/null
        ERRS=$ERRS"Ошибка загрузки текущей смены с АЗС $azs: принят плохой файл;"
        continue
    fi

    IDSHOP=$(echo $FILE | cut -d'.' -f2)
    SHIFT_CUR=$(echo $FILE | cut -d'.' -f3)
    #STATUS=$(echo $FILE | cut -d'.' -f4)
    if [ "$cml_debug" == "yes" ]; then
        echo IDSHOP=$IDSHOP SHIFT_CUR=$SHIFT_CUR
    fi

    popd > /dev/null
    rm -r "$TMPDIR" 2>/dev/null

    if [ -z "$IDSHOP" -o -z "$SHIFT_CUR" ]; then
        ERRS=$ERRS"Ошибка загрузки текущей смены с АЗС $azs: плохой файл в архиве;"
        continue
    fi

    SQL="select max(num) from sj_shifts where id_shop=$IDSHOP and time_end is not null limit 1"
    SHIFT_LAST=$(psql $DBLOCALNAME -U $DBLOCALUSER -Atq -c "$SQL")

    if [ -z "$SHIFT_LAST" ]; then
        ERRS=$ERRS"Ошибка при получении данных из локальной базы для АЗС $azs;"
        continue
    fi

    SHIFT1=$(expr $SHIFT_LAST + 1)
    SHIFT2=$(expr $SHIFT_CUR - 1)
    if [ "$cml_debug" == "yes" ]; then
        echo SHIFT1=$SHIFT1 SHIFT2=$SHIFT2 
    fi
    if [ $SHIFT1 -le $SHIFT2 ]; then
        DELTA=$(expr $SHIFT2 - $SHIFT1)
        if [ $DELTA -gt $DELTA_MAX ]; then
            SHIFT2=$(expr $SHIFT1 + $DELTA_MAX)
            ERRS=$ERRS"По АЗС $azs остались незагруженные смены;"
        fi
        if [ $SHIFT1 -eq $SHIFT2 ]; then
            SHIFTS=$SHIFT1
        else
            SHIFTS=${SHIFT1}-${SHIFT2}
        fi
        if [ "$cml_debug" == "yes" ]; then
            echo SHIFTS=$SHIFTS
        fi
        $BINDIR/ldsshbuk $KEY $azs -sh ${SHIFTS}
        if [ $? -ne 0 ]; then
            ERRS=$ERRS"Ошибка загрузки прошедших смен с АЗС $azs;"
        else
            TARFILES=${TARFILES}"j.$azs.${SHIFTS}.tar.bz2 "
        fi
    fi
done

# загрузить принятые файлы в локальную базу
mkdir -p ./noloaded
for tarfile in $TARFILES; do
    $BINDIR/file2bukdb -db $DBLOCALNAME -user $DBLOCALUSER -f $tarfile > /dev/null 2>/dev/null
    if [ $? -ne 0 ]; then
        ERRS=$ERRS"Ошибка загрузки данных из файла $tarfile;"
    fi
    if [ -f $tarfile ]; then
        mv $tarfile ./noloaded 2>/dev/null
    fi
done

popd > /dev/null
echo $ERRS | tr ";" "\n"
if [ ! -z "$ERRS" ]; then
    exit 1
fi
exit 0
