#!/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"

_compile_po(){
	# $1: path to .po file
	_src="$1"
	_name=$(basename "$_src" .po)
	_mo="${_src%.*}.mo"
	msgfmt -o "$_mo" "$_src"
	_dst="$PF_INSTPFX/app/global/language/$_name/LC_MESSAGES"
	mkdir -p "$_dst"
	cp -v -r -f "$_mo" "$_dst/language.mo"
	rm -f "$_mo"
}

update_mo(){
	PO_PATH=../translation
	CUSTOM_PO_PATH=../customer/${CUSTOM}/translation

	# mainline translation files
	if [ -d "$PO_PATH" ]; then
		for po in "$PO_PATH"/*.po; do
			[ -f "$po" ] || continue
			_compile_po "$po"
		done
	fi

	# customer translation files, override mainline with same name
	if [ -n "${CUSTOM}" ] && [ -d "$CUSTOM_PO_PATH" ]; then
		for po in "$CUSTOM_PO_PATH"/*.po; do
			[ -f "$po" ] || continue
			_compile_po "$po"
		done
	fi
}

# 仅安装目录下载（阻塞，但有超时，不会无限等待）
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
        ;;
    MA35D1)
        cp ../config/hw_cfg/ma35d1/* "$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

    # 初始化脚本
    chmod a+x ./scripts/app_self_check
    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
