#!/bin/sh

mkdir -p ipkg-dir

if [ -d ipkg-dir ] ; then
    PF_INSTPFX="${PWD}/ipkg-dir${LNX_PREFIX}"
else
    PF_INSTPFX="${LNXDESTPFX}"
fi

CONFIG_DIR="$PF_INSTPFX/app/config"
GLOBAL_DIR="$PF_INSTPFX/app/global"
ALARM_DIR="$PF_INSTPFX/app/global/alarminfo"
UBUSLOG_FILE="$PF_INSTPFX/platspec"

update_mo(){
	# 多语言文件编译, 放在这里比较合适，每次编译proto_forward时都会更新
	PO_PATH=../translation
	po_files=`ls ${PO_PATH}/*.po`
    for po_file in "${po_files[@]}"
    do
        mo_file="${po_file%.*}.mo"
        msgfmt -o "$mo_file" "$po_file"
    done
	# 把文件名后缀去掉
	po_names=$(echo "$po_files" | sed 's/.*\///; s/\.po//')
	for po_name in $po_names; do
        LANGUAGE_DIR="$PF_INSTPFX/app/global/language/$po_name/LC_MESSAGES"
		mkdir -p  $LANGUAGE_DIR
		cp -rvf ${PO_PATH}/${po_name}.mo $LANGUAGE_DIR/language.mo
	done
	rm -f ${PO_PATH}/*.mo
}



# 仅安装目录下载（阻塞，但有超时，不会无限等待）
fetch_alarm_defs_async() {
    : "${ALARM_DIR:=${PF_INSTPFX}/app/global/alarminfo}"
    : "${FETCH_CONNECT_TIMEOUT:=5}"
    : "${FETCH_MAX_TIME:=10}"
    CREDENTIALS='support:lnxall1234!@#$'
    if command -v curl >/dev/null 2>&1; then
        if [ "$FETCH_NO_VERIFY" = "1" ]; then
            _dl() { curl -k -fsSL --connect-timeout "$FETCH_CONNECT_TIMEOUT" --max-time "$FETCH_MAX_TIME" -u "$CREDENTIALS" "$1"; }
        else
            _dl() { curl -fsSL --connect-timeout "$FETCH_CONNECT_TIMEOUT" --max-time "$FETCH_MAX_TIME" -u "$CREDENTIALS" "$1"; }
        fi
    elif command -v wget >/dev/null 2>&1; then
        if [ "$FETCH_NO_VERIFY" = "1" ]; then
            _dl() { wget --no-check-certificate -q -T "$FETCH_MAX_TIME" -O - "$1"; }
        else
            _dl() { wget -q -T "$FETCH_MAX_TIME" -O - "$1"; }
        fi
    else
        echo "[alarm_fetch] SKIP: no curl/wget"
        return 0
    fi

    mkdir -p "$ALARM_DIR/zh_CN" "$ALARM_DIR/en_US"

    fetch_to() {
        url="$1"; dest_file="$2"
        dest_dir="$(dirname "$dest_file")"
        mkdir -p "$dest_dir"
        tmp="$(mktemp -p "$dest_dir" 2>/dev/null || echo "/tmp/fetch_$$")"
        if _dl "$url" >"$tmp" && [ -s "$tmp" ]; then
            if mv -f "$tmp" "$dest_file"; then
                echo "[fetch] OK: $url -> $dest_file"
                return 0
            fi
        fi
        rm -f "$tmp"
        echo "[fetch] FAIL: $url"
        return 1
    }

    for lang in en_US zh_CN; do
        fetch_to "http://192.168.22.226:8000/ems_alarm/alarminfo/${lang}/alarm_def.json" \
                 "${ALARM_DIR}/${lang}/alarm_def.json"
    done

    return 0
}

hw_copy_file() {
    echo "LNX_TARGET_DEV:$1"
    #
    case "$1" in
    iMX6ULL)
        cp ../config/hw_cfg/imx6ull/* "$CONFIG_DIR" -rfv
        mv "$CONFIG_DIR/emsd_notaosd.service" "$PF_INSTPFX/platspec/emsd.service" -vf
        ;;
    BAU-B30-003)
        cp ../config/hw_cfg/bau3.0/* "$CONFIG_DIR" -rfv
        ;;
    RK3568)
        ;;
    ECU1170)
        cp ../config/hw_cfg/ecu1170/* "$CONFIG_DIR" -rfv
        ;;
    *) ;;
    esac
}

rsyslog_copy_cfg() {
    cp ../config/etc/*.json "$UBUSLOG_FILE" -rfv
}


mainfunc() {
    chmod a+x *.sh
    chmod a+x scripts/*
    chmod +x ./inits/*.sh

    mkdir -p "$PF_INSTPFX"
    mkdir -p "$PF_INSTPFX/bin"
    mkdir -p "$PF_INSTPFX/bin/inits/"
    mkdir -p "$PF_INSTPFX/platspec"
    mkdir -p "$GLOBAL_DIR/template"
    mkdir -p "$ALARM_DIR"

    cp proto_forward "$PF_INSTPFX/bin" -rf
    cp em*d_startup.sh "$PF_INSTPFX/bin" -rf
    cp ../files/*.service "$PF_INSTPFX/platspec" -rf
    cp  ../cert "$PF_INSTPFX/app/" -rf
    cp ./scripts/sync_cfg "$PF_INSTPFX/bin" -rf
    cp ./scripts/del_all_data.sh "$PF_INSTPFX/bin"
    mv version.log $PF_INSTPFX # 拷贝过去给生产elf包的时候添加版本号使用

    rsync -a --exclude='hw_cfg' --exclude='etc' ../config "$PF_INSTPFX/app"
    rsync -a --exclude='.git' --exclude='.gitlab-ci.yml' ../template "$GLOBAL_DIR"
    sshpass -p lnxall123 scp -oConnectTimeout=5 -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -q -r lnxall@192.168.22.227:/home/lnxall/ems_alarm/alarminfo/* "$ALARM_DIR"

    fetch_alarm_defs_async

    update_mo

    # 初始化脚本
    rsync -a --exclude='__pycache__' ./scripts/* "$PF_INSTPFX/bin"
    cp ./inits/* "$PF_INSTPFX/bin/inits/" -rf
    chmod a+x $PF_INSTPFX/bin/*

    # 硬件相关的配置拷贝
    hw_copy_file $LNX_TARGET_DEV
    chmod a+x ${PF_INSTPFX}/bin/*

    rsyslog_copy_cfg
    return $?
}

mainfunc
