#!/bin/bash
DBNAME=ubuk
DBUSER=bukts
DELSHIFT=

parse_j() {
    mv $1 $1.tmp
    sed -e "/shop/s/|/,/g" \
        -e "s/|$/|\\\\N/g" \
        -e "s/||/|\\\\N|/g" \
        -e "s/||/|\\\\N|/g" \
        -e "s/||/|\\\\N|/g" \
        -e "s/||/|\\\\N|/g" \
        -e "s/|/\t/g" \
        -e "/shop/a\) FROM stdin;" \
        -e "/^(/a\\\\\." \
        -e "/^(/d" \
        $1.tmp > $1
    rm $1.tmp
}

sort_gd_group_list() {
    mv $1 $1.tmp
    cat $1.tmp | grep INSERT | cut -d'(' -f2 | sort -n | while read line
    do
        echo "INSERT INTO gd_group_list VALUES ("$line >> $1
    done
    rm $1.tmp
}

### обработать командную строку
i=$#;  # число параметров в командной строке
while [ $i -ge "0" ]; do
    is="no"
    case $1 in
    -db) # имя БД
        is="yes"; DBNAME=$2 ;;
    -U|-user) # пользователь БД
        is="yes"; DBUSER=$2 ;;
    -f|-file)
        is="yes"; FILE=$2 ;;
    -delshift) # удалить предыдущие данные
        DELSHIFT="yes" ;;
    -debug) # оставлять файл с данными
        DEBUG="yes" ;;
    esac
    if [ $is == "yes" ]; then
        shift
        i=`expr $i - 1`
    fi
    shift
    i=`expr $i - 1`
done

if [ -z "$FILE" ]; then
    MSG="Не задано имя файла"
    echo $MSG >& 2
    exit 1
fi
DIR0=$(dirname $FILE)

TmpDir=$DIR0/"tmp.$(basename $FILE ".bz2").$(date "+%y%m%d%H%M%S")"
if [ -d "$TmpDir" ]; then
    rm -rf $TmpDir
fi
mkdir -p $TmpDir
echo "$(date +%H:%M:%S) Разархивирование файла \"$FILE\""

if [ ! -z "$(echo $FILE | grep "bz2")" ]; then
    tar --bzip2 -xf $FILE -C $TmpDir
elif [ ! -z "$(echo $FILE | grep "gz")" ]; then
    tar -xzf $FILE -C $TmpDir
else
    rm -rf $TmpDir
    MSG="Не определен тип архива"
    echo $MSG >& 2
    exit 1
fi
Err=$?
if [ $Err -ne 0 ]; then
    rm -rf $TmpDir
    MSG="Ошибка при разархивировании файла $File"
    echo $MSG >& 2
    exit 1
fi

# загрузка справочников, если они есть в архиве
DIC_TABLES="sd_group_user sd_ident sd_kassalist sd_local_conf_type sd_operation_type \
    sd_payments sd_rule_type sd_tazscards sd_conf_local sd_user_list sd_group_rule \
    sd_payprices \
    pd_products pd_prodprices pd_loyalty pd_tanks_list \
    gd_tax gd_group_list gd_list gd_actions_adm gd_actions \
    gd_identification gd_manager gd_store gd_supplier gd_actions_adm_m \
    gd_actions_save_m gd_actions_save_d \
    gd_count"

pushd $TmpDir > /dev/null
for i in $(echo $DIC_TABLES)
do
    TFILE=$(ls d.*.$i.sql 2>/dev/null)
    if [ ! -z "$TFILE" -a -f "$TFILE" ]; then
        echo "$(date +%H:%M:%S) Загрузка файла \"$TFILE\" в БД"
        if [ ! -z "$(echo $TFILE | grep gd_group_list)" ]; then
            sort_gd_group_list $TFILE
        fi

        psql $DBNAME -U $DBUSER -f $TFILE -q -h localhost
        #rm $TFILE
        echo "result=$?"
    fi
done

# загрузка смен, если они есть в архиве в новые схемы
echo "ls -v u.*sql 2>/dev/null"
for i in $(ls -v u.*sql 2>/dev/null)
do
    if [ -z "$i" -o ! -f "$i" ]; then
        continue
    fi

    IDSHOP=$(head -n5 "$i" | grep IDSHOP | cut -d: -f2)
    SHIFT=$(head -n5 "$i" | grep SHIFT | cut -d: -f2)

    if [ -z "$SHIFT" -o -z "$IDSHOP" ]; then
        rm -rf $TmpDir
        MSG="Файл \"$i\": не известен номер смены или идентификатор магазина"
        echo $MSG >& 2
        exit 1
    fi


    echo "$(date +%H:%M:%S) Загрузка файла $i в БД"
    psql $DBNAME -U $DBUSER -f $i -q -h localhost
    echo "$(date +%H:%M:%S) result=$?"
    
    echo "$(date +%H:%M:%S) Проверка локальных справочников $i в БД"
    psql $DBNAME -U $DBUSER -c "SELECT sf_do_all_restore_from_history($IDSHOP, $SHIFT)" -q -h localhost
    echo "$(date +%H:%M:%S) result=$?"
    
    if [ -f "/opt/bukdata-out/main_smoke.sh" ]; then
        bash /opt/bukdata-out/main_smoke.sh $IDSHOP
    fi
done


# загрузка смен, если они есть в архиве
echo "ls -v j.*sql 2>/dev/null"
for i in $(ls -v j.*sql 2>/dev/null)
do
    if [ -z "$i" -o ! -f "$i" ]; then
        continue
    fi

    if [ ! -z "$(echo $i | grep "psql$")" ]; then
        echo "$(date +%H:%M:%S) Преобразование формата входного файла"
        parse_j $i
        echo "$(date +%H:%M:%S) result=$?"
    fi

    IDSHOP=$(head -n5 "$i" | grep IDSHOP | cut -d: -f2)
    SHIFT=$(head -n5 "$i" | grep SHIFT | cut -d: -f2)

    if [ -z "$SHIFT" -o -z "$IDSHOP" ]; then
        rm -rf $TmpDir
        MSG="Файл \"$i\": не известен номер смены или идентификатор магазина"
        echo $MSG >& 2
        exit 1
    fi

    echo "$(date +%H:%M:%S) Удаление загружаемой смены $SHIFT из БД"
    bukdb_delj -db $DBNAME -user $DBUSER -shop $IDSHOP -sh $SHIFT
    Err=$?
    echo "$(date +%H:%M:%S) result=$?"
    if [ $Err -ne 0 ]; then
        rm -rf $TmpDir
        MSG="Ошибка при удалении данных смены $SHIFT"
        echo $MSG >& 2
        exit 1
    fi

    echo "$(date +%H:%M:%S) Загрузка файла $i в БД"
    psql $DBNAME -U $DBUSER -f $i -q -h localhost
    echo "$(date +%H:%M:%S) result=$?"

    echo "$(date +%H:%M:%S) Проверка локальных справочников $i в БД"
    psql $DBNAME -U $DBUSER -c "SELECT sf_do_all_restore_from_history($IDSHOP, $SHIFT)" -q -h localhost
    echo "$(date +%H:%M:%S) result=$?"

    echo "$(date +%H:%M:%S) Проверка контрольных сумм"
#     psql $DBNAME -U $DBUSER -c "UPDATE sj_shifts SET chksum=0 WHERE id_shop=$IDSHOP AND num>=$SHIFT" -q -h localhost
    psql $DBNAME -U $DBUSER -c "SELECT sf_do_shift_md5($IDSHOP, $SHIFT, 0) FROM sj_shifts WHERE id_shop=$IDSHOP AND num=$SHIFT AND time_end IS NOT NULL" -q -h localhost
    echo "$(date +%H:%M:%S) result=$?"

    echo "$(date +%H:%M:%S) Конвертация смены в схему 6"
    psql $DBNAME -U $DBUSER -c "SELECT utranz.sf_do_conv_db5todb6($IDSHOP, $SHIFT, true, true);" -q -h localhost
    echo "$(date +%H:%M:%S) result=$?"

    if [ -f "/opt/bukdata-out/main_smoke.sh" ]; then
        bash /opt/bukdata-out/main_smoke.sh $IDSHOP
    fi
done


# загрузка остатков топлива(Казахстан), если он есть в архиве
echo "ls -v p.*sql 2>/dev/null"
for i in $(ls -v p.*sql 2>/dev/null)
do
    if [ -z "$i" -o ! -f "$i" ]; then
        continue
    fi

    if [ ! -z "$(echo $i | grep "psql$")" ]; then
        echo "$(date +%H:%M:%S) Преобразование формата входного файла"
        parse_j $i
        echo "$(date +%H:%M:%S) result=$?"
    fi

    IDSHOP=$(head -n4 "$i" | grep IDSHOP | cut -d: -f2)
    SHIFT=$(head -n4 "$i" | grep SHIFT | cut -d: -f2)

    if [ -z "$SHIFT" -o -z "$IDSHOP" ]; then
        rm -rf $TmpDir
        MSG="Файл \"$i\": не известен номер смены или идентификатор магазина"
        echo $MSG >& 2
        exit 1
    fi
    
    if [ ! -z "$DELSHIFT" ]; then
        echo "$(date +%H:%M:%S) Удаление для АЗС $IDSHOP смены $SHIFT"
        psql $DBNAME -U $DBUSER -c "DELETE FROM utranz.sj_shifts WHERE id_shop=$IDSHOP AND shift=$SHIFT;" -q -h localhost
        echo "$(date +%H:%M:%S) result=$?"
    fi
    
    echo "$(date +%H:%M:%S) Загрузка файла $i в БД"
    psql $DBNAME -U $DBUSER -f $i -q -h localhost
    echo "$(date +%H:%M:%S) result=$?"

    echo "$(date +%H:%M:%S) Проверка контрольных сумм"
    psql $DBNAME -U $DBUSER -c "UPDATE utranz.sj_shifts SET chksum=CASE WHEN utranz.sf_get_shift_md5($IDSHOP,$SHIFT,301)=md5sum THEN 1 ELSE 2 END WHERE id_shop=$IDSHOP AND shift = $SHIFT;" -q -h localhost
    echo "$(date +%H:%M:%S) result=$?"
done

# загрузка талонов, если они есть в архиве
echo "ls -v t.*sql 2>/dev/null"
for i in $(ls -v t.*sql 2>/dev/null)
do
    if [ -z "$i" -o ! -f "$i" ]; then
        continue
    fi

    if [ ! -z "$(echo $i | grep "psql$")" ]; then
        echo "$(date +%H:%M:%S) Преобразование формата входного файла"
        parse_j $i
        echo "$(date +%H:%M:%S) result=$?"
    fi

    IDSHOP=$(head -n5 "$i" | grep IDSHOP | cut -d: -f2)
    SHIFT=$(head -n5 "$i" | grep SHIFT | cut -d: -f2)

    if [ -z "$SHIFT" -o -z "$IDSHOP" ]; then
        rm -rf $TmpDir
        MSG="Файл \"$i\": не известен номер смены или идентификатор магазина"
        echo $MSG >& 2
        exit 1
    fi

    echo "$(date +%H:%M:%S) Загрузка файла $i в БД"
    psql $DBNAME -U $DBUSER -f $i -q -h 127.0.0.1
    echo "$(date +%H:%M:%S) result=$?"
done

popd > /dev/null
if [ "$DEBUG" != "yes" ]; then
    rm -rf $TmpDir
fi

echo "$(date +%H:%M:%S) ok"
exit 0
