#!/bin/sh
ctrl_mode=0

get_board_sn() {
    uboot_env=$(factory get)
    BOARD_NAME=$(cat /tmp/sysinfo/board_name)
    sn=$(echo "$uboot_env" | awk -F'=' '/^SN=/{print $2}')
    if [ -z "$BOARD_NAME" ] || [ -z "$sn" ]; then
        echo "product or sn err"
        exit 1
    else
        echo "BOARD_NAME=$BOARD_NAME"
        echo "sn=$sn"
    fi
}

get_sd_pwd() {
    case "$1" in
    WLOSANY_LC100 | WLOSANY_WooLink2004)
        sd_pwd="/mnt/sdisk"
        ;;
    *) ;;
    esac
}

reload_frp() {
    /etc/init.d/frpc restart
}

reload_net_cfg() {
    case "$1" in
    WooLink2004_W_4G | WooLink_SMC_GW_V3_Lite | WooLink5F6280_W_4G | WooLink2F6280_W_4G | QIYANG_IMX6ULL_2)
        /etc/init.d/network restart
        ;;
    WLOSANY_EM1000 | WLOSANY_RK3568 | WLOSANY_RK3568_XDDL | WLOSANY_RK3568_FORLINX | WLOSANY_BAU-B30-003 | WLOSANY_X86_V3 | WLOSANY_LC100 | WLOSANY_WooLink2004 | WLOSANY_ECU1170)
        netuci
        ;;
    *) ;;
    esac
}

set_network() {
    case "$1" in
    WooLink2004_W_4G | WooLink_SMC_GW_V3_Lite | WooLink5F6280_W_4G | WooLink2F6280_W_4G | QIYANG_IMX6ULL_2)
        /lib/dyiot/bin/set_vap.sh set ap -name vap00 -ssid EMS-$cab_id-$sn -key lnxall123
        /lib/dyiot/bin/set_lan_inline.sh del ilan
        /lib/dyiot/bin/set_lan_inline.sh set lan --ipaddr $lan_ip
        if [ "$wan_cfg_1" = "dhcp" ]; then
            if [ -z "$wan_metric_1" ]; then
                /lib/dyiot/bin/set_wan.sh set wan -D
            else
                /lib/dyiot/bin/set_wan.sh set wan -D -m $wan_metric_1
            fi
        else
            if [ -z "$wan_metric_1" ]; then
                /lib/dyiot/bin/set_wan.sh set wan -S $wan_cfg_1
            else
                /lib/dyiot/bin/set_wan.sh set wan -S $wan_cfg_1 -m $wan_metric_1
            fi
        fi
        ;;
    WLOSANY_EM1000 | WLOSANY_RK3568 | WLOSANY_RK3568_XDDL | WLOSANY_RK3568_FORLINX | WLOSANY_BAU-B30-003 | WLOSANY_X86_V3 | WLOSANY_ECU1170)
        uci set network.lan.device='br-lan'
        uci set network.lan.proto='static'
        uci set network.lan.ipaddr=$lan_ip
        uci set network.lan.netmask='255.255.255.0'
        uci commit network
        if [ "$wan_cfg_1" = "dhcp" ]; then
            if [ -z "$wan_metric_1" ]; then
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan -D
            else
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan -D -m $wan_metric_1
            fi
        else
            if [ -z "$wan_metric_1" ]; then
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan -S $wan_cfg_1
            else
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan -S $wan_cfg_1 -m $wan_metric_1
            fi
        fi
        if [ "$wan_cfg_2" = "dhcp" ]; then
            if [ -z "$wan_metric_2" ]; then
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan1 -D
            else
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan1 -D -m $wan_metric_2
            fi
        else
            if [ -z "$wan_metric_2" ]; then
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan1 -S $wan_cfg_2
            else
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan1 -S $wan_cfg_2 -m $wan_metric_2
            fi
        fi
        ;;
    WLOSANY_LC100 | WLOSANY_WooLink2004)
        bash /lib/dyiot/bin/set_lan_inline.sh set lan --ipaddr $lan_ip
        if [ "$wan_cfg_1" = "dhcp" ]; then
            if [ -z "$wan_metric_1" ]; then
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan -D
            else
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan -D -m $wan_metric_1
            fi
        else
            if [ -z "$wan_metric_1" ]; then
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan -S $wan_cfg_1
            else
                bash /opt/lnxall_app/lib/dyiot/bin/set_wan.sh set wan -S $wan_cfg_1 -m $wan_metric_1
            fi
        fi
        ;;
    *) ;;
    esac
}

start_httpd_and_ftp() {
    df |grep $sd_pwd
    if [ $? -eq 0 ]; then            #判断sd卡是否挂载
        case "$1" in
        SMC-SERVWE_V2 | WooLink2004_W_4G | WooLink_SMC_GW_V3_Lite | WooLink5F6280_W_4G | WooLink2F6280_W_4G | QIYANG_IMX6ULL_2)
                uci set uhttpd.main.home=$sd_pwd #http
                uci commit
                /etc/init.d/uhttpd reload

                ###ftp
                ftp_config_pwd=/etc/vsftpd.conf
                if [ -f "$ftp_config_pwd"]; then
                    sed -i "s/anonymous_enable=NO/anonymous_enable=YES/g" $ftp_config_pwd
                    grep -q "anon_root" $ftp_config_pwd
                    if [ $? -ne 0 ]; then
                        echo "anon_root=$sd_pwd" >>$ftp_config_pwd
                    else
                        sed -i "s/anon_root.*/anon_root=$sd_pwd/g" $ftp_config_pwd
                    fi
                    /etc/init.d/vsftpd reload
                fi
                ####
            ;;
        WLOSANY_EM1000)
                ###ftp
                ftp_config_pwd=/etc/vsftpd.conf
                if [ -f "$ftp_config_pwd" ]; then
                    sed -i "s/anonymous_enable=NO/anonymous_enable=YES/g" $ftp_config_pwd
                    grep -q "anon_root" $ftp_config_pwd
                    if [ $? -ne 0 ]; then
                        echo "anon_root=$sd_pwd" >>$ftp_config_pwd
                    else
                        sed -i "s/anon_root.*/anon_root=$sd_pwd/g" $ftp_config_pwd
                    fi
                    /etc/init.d/vsftpd reload
                fi
                ####
            ;;
            WLOSANY_RK3568 | WLOSANY_RK3568_XDDL | WLOSANY_RK3568_FORLINX | WLOSANY_BAU-B30-003 | WLOSANY_X86_V3 | WLOSANY_ECU1170)
                ###ftp
                ftp_config_pwd="$sd_pwd/history/"
                killall "busybox tcpsvd"
                busybox tcpsvd -vE 0.0.0.0 21 busybox ftpd -a root -w $ftp_config_pwd &
            ;;
            *) ;;
        esac
    fi
}

check_up_grade() {
    update_file_name="/tmp/ems.update"
    case "$1" in
    SMC-SERVWE_V2 | WooLink2004_W_4G | WooLink_SMC_GW_V3_Lite | WooLink5F6280_W_4G | WooLink2F6280_W_4G | QIYANG_IMX6ULL_2)
        if [ -f "$update_file_name" ]; then
            (
                tmp_name="/tmp/ems.ipk"
                mv $update_file_name $tmp_name
                echo "upgrade $tmp_name!!"
                /bin/opkg install --force-reinstall $tmp_name
                exit 0
            )
            sleep 5
        fi
        ;;
    WLOSANY_EM1000 | WLOSANY_RK3568 | WLOSANY_RK3568_XDDL | WLOSANY_RK3568_FORLINX | WLOSANY_BAU-B30-003 | WLOSANY_X86_V3|WLOSANY_ECU1170)
        if [ -f "$update_file_name" ]; then
            (
                tmp_name="/tmp/ems.file"
                mv $update_file_name $tmp_name
                chmod 777 $tmp_name
                echo "upgrade $tmp_name!!"
                nohup $tmp_name &
                exit 0
            )
            sleep 5
        fi
        ;;
    *) ;;

    esac
}
# 内联的口
bing_opcua_if() {
    get_ip_cmd="ifconfig eth0 | grep -w 'inet addr'|sed 's/^ *//'|cut -d ' ' -f 2 | cut -c 6-"
    case "$1" in
    WooLink2004_W_4G | WooLink_SMC_GW_V3_Lite | WooLink5F6280_W_4G | WooLink2F6280_W_4G | QIYANG_IMX6ULL_2)
        bcast_port="eth1"
        ;;
    WLOSANY_EM1000)
        bcast_port="net1"
        get_ip_cmd="ifconfig net1 | grep -w inet | sed 's/^ *//' | cut -d ' ' -f 2"
        ;;
    WLOSANY_RK3568 | WLOSANY_RK3568_XDDL | WLOSANY_RK3568_FORLINX | WLOSANY_BAU-B30-003 | WLOSANY_WooLink2004 | WLOSANY_ECU1170)
        bcast_port="eth0"
        get_ip_cmd="ifconfig eth0 | grep -w 'inet'|sed 's/^ *//'|cut -d ' ' -f 2"
        ;;
    WLOSANY_LC100)
        bcast_port="eth1"
        get_ip_cmd="ifconfig eth1 | grep -w 'inet'|sed 's/^ *//'|cut -d ' ' -f 22"
        ;;

    WLOSANY_X86_V3)
        bcast_port="enp1s0"
        get_ip_cmd="ifconfig enp1s0 | grep -w 'inet'|sed 's/^ *//'|cut -d ' ' -f 2"
        ;;
    *)
        bcast_port="eth0"
        echo "Do not supported this product [$1],using default bcast_port:$bcast_port"
        ;;
    esac
    route add -net 224.0.0.251 netmask 255.255.255.255 $bcast_port

}

check_program_and_recover() {
    if [ -z "$1" -o -z "$2" ]; then
        echo "Invalid the name of program or it whether enabled or not"
        return
    fi
    PROG=$1
    PRAM=$2
    PROG_PATH=/opt/lnxall_app/bin
    # case "$BOARD_NAME" in
    # WooLink2004_W_4G | WooLink_SMC_GW_V3_Lite | WooLink5F6280_W_4G | WooLink2F6280_W_4G | QIYANG_IMX6ULL_2)
    #     PROG_PATH=/app
    #     ;;
    # WLOSANY_EM1000 | WLOSANY_RK3568 | WLOSANY_RK3568_XDDL | WLOSANY_RK3568_FORLINX | WLOSANY_X86_V3 | WLOSANY_ECU1170)
    #     PROG_PATH=/opt/lnxall_app/bin
    #     ;;
    # WLOSANY_LC100 | WLOSANY_WooLink2004)
    #     PROG_PATH=/opt/lnxall_app/bin
    #     PRAM="-c $PRAM"
    #     ;;
    # WLOSANY_BAU-B30-003)
    #     PROG_PATH=/opt/lnxall_app/bin
    # ;;
    # *)
        # exit 3
        # ;;
    # esac

    if [ $ctrl_mode -gt 0 ]; then
        PRAM="-g $PRAM"
    fi
    echo $PROG_PATH/$PROG $PRAM
    res=$(ps aux | grep $PROG | grep -v grep | wc -l)
    #查询端口下的运行进程的数目，也可以把8000改成想要守护的进程名
    if [ $res -eq 0 ]; then #如果进程数为0
        echo "Program [$PROG] has crashed ."
        $PROG_PATH/$PROG $PRAM &
    fi
}

stop_program() {
    if [ -z "$1" ]; then
        echo "Invalid the name of program or it whether enabled or not"
        return
    fi
    PROG=$1
    res=$(ps | grep $PROG | grep -v grep | wc -l)
    if [ $res -gt 0 ]; then #如果进程为>0
        echo "[killall -9 $PROG]"
        killall -9 $PROG
    fi
}

restart_frp() {
    case "$1" in
    WooLink2004_W_4G | WooLink_SMC_GW_V3_Lite | WooLink5F6280_W_4G | WooLink2F6280_W_4G | QIYANG_IMX6ULL_2)
        /etc/init.d/frpc restart
        ;;
    WLOSANY_EM1000 | WLOSANY_RK3568 | WLOSANY_RK3568_XDDL | WLOSANY_RK3568_FORLINX | WLOSANY_BAU-B30-003 | WLOSANY_X86_V3|WLOSANY_ECU1170)
        systemctl restart frpc.service
        ;;
    *)
    esac
}

load_json_cfg() {
    local wan_sum=1
    case "$1" in
    WooLink2004_W_4G | WooLink_SMC_GW_V3_Lite | WooLink5F6280_W_4G | WooLink2F6280_W_4G | QIYANG_IMX6ULL_2)
        . /usr/share/libubox/jshn.sh
        ;;
    WLOSANY_EM1000 | WLOSANY_RK3568 | WLOSANY_RK3568_XDDL | WLOSANY_RK3568_FORLINX | WLOSANY_BAU-B30-003 | WLOSANY_X86_V3 | WLOSANY_ECU1170)
        wan_sum=2
        PATH=$PATH:/opt/lnxall_app/bin/
        . /opt/lnxall_app/share/libubox/jshn.sh
        ;;
    WLOSANY_LC100 | WLOSANY_WooLink2004)
        PATH=$PATH:/opt/lnxall_app/bin/
        . /opt/lnxall_app/share/libubox/jshn.sh
        ;;
    *)
        echo "Do not supported this product [$1]"
        return 1
        ;;
    esac

    if [ -f "$system_cfg_file" ]; then
        #load json file
        json_load "$(cat "$system_cfg_file")"
        json_get_var id_v 'id'
        json_get_var en_lc_v 'en_lc'
        json_get_var ctrl_mode_v 'ctrl_mode'
        json_get_var en_mqtt_stactrl_v 'en_mqtt_stactrl'
        cab_id=$id_v
        en_lc=$en_lc_v
        ctrl_mode=$ctrl_mode_v
        en_mqtt_stactrl=$en_mqtt_stactrl_v
        echo "cab_id=$cab_id"
    else
        echo "Missing file :$system_cfg_file"
        return 2
    fi

    port_cfg="/app/config/port_config.json"
    if [ -f "$port_cfg" ]; then
        # lan
        json_load "$(cat "$port_cfg")"
        json_select dev_cfg
        json_select lan
        json_select attr
        json_select 1
        json_get_var tmp name
        if [ "$tmp" = "lan" ]; then
            json_get_var tmp ip
            lan_ip=$tmp
        else
            echo "the lan cfg is error, causing the IP to not take effect"
        fi
        # wan
        json_load "$(cat "$port_cfg")"
        json_select dev_cfg
        json_select wan
        json_select attr
        json_select 1
        json_get_var tmp name

        if [ "$tmp" = "wan1" ] || [ "$tmp" = "wan" ]; then
            json_get_var tmp type
            if [ "$tmp" = "static" ]; then
                json_get_var tmp gateway
                wan_cfg_1=$tmp
                json_get_var tmp ip
                wan_cfg_1="$wan_cfg_1 $tmp"
                wan_ip=$tmp
                json_get_var tmp mask
                wan_cfg_1="$wan_cfg_1/$tmp"
            else
                json_get_var wan_ip ip
            fi
            if json_is_a metric string; then
                json_get_var tmp metric
                wan_metric_1=$tmp
            fi
        else
            echo "the wan cfg is error, causing the IP to not take effect"
        fi
        if [ "$wan_sum" -gt 1 ]; then
            json_select ..
            json_select 2
            json_get_var tmp name

            if [ "$tmp" = "wan2" ]; then
                json_get_var tmp type
                if [ "$tmp" = "static" ]; then
                    json_get_var tmp gateway
                    wan_cfg_2=$tmp
                    json_get_var tmp ip
                    wan_cfg_2="$wan_cfg_2 $tmp"
                    wan_ip=$tmp
                    json_get_var tmp mask
                    wan_cfg_2="$wan_cfg_2/$tmp"
                else
                    json_get_var wan_ip ip
                fi
                if json_is_a metric string; then
                    json_get_var tmp metric
                    wan_metric_2=$tmp
                fi
            else
                echo "the wan2 cfg is error, causing the IP to not take effect"
            fi
        fi
    else
        echo "Missing file :$port_cfg"
        return 3
    fi

    echo "lan ip:$lan_ip"
    echo "wan1 cfg:$wan_cfg_1"
    echo "wan2 cfg:$wan_cfg_2"
}

ln_multilingual_resource() {
    tmp_file=/opt/lnxall_app/app/template
    if [ -e $tmp_file ]; then
        if [ -L $tmp_file ]; then
            rm -v $tmp_file
        else
            echo "$tmp_file is not a symbolic link"
            # return 0
        fi
    fi

    tmp_file=/opt/lnxall_app/app/alarminfo
    if [ -e $tmp_file ]; then
        if [ -L $tmp_file ]; then
            rm -v $tmp_file
        else
            echo "$tmp_file is not a symbolic link"
            # return 0
        fi
    fi

    # 获取系统语言
    lang=$(cat /etc/default/locale | grep LANG | tail -n 1 | awk -F '=' '{print $2}' | awk -F '.' '{print $1}')
    if cd /opt/lnxall_app/app ; then
        ln -sv global/template/${lang} template
        ln -sv global/alarminfo/${lang} alarminfo
        cd -
    fi
}

create_database_dir() {
    local ssd_dir="$1"
    local database_path='/opt/lnxall_app/app/database'
    local mounted=`mount | grep $ssd_dir | wc -l`

    if [ "$mounted" -eq 0 ]; then
        echo "ssd unamounted."
        mkdir -vp $database_path
    else
        echo "ssd mounted."
        if [ ! -e $ssd_dir/database ]; then
            echo "/mnt/ssd/database not exists , create it."
            mkdir -vp $ssd_dir/database
        fi
        if [ -L $database_path ]; then
            echo "Soft link already exists."
            return 0
        fi
        if [ -d $database_path ]; then
            echo "database dir exists."
            cp -rvf $database_path/* $ssd_dir/database
            rm -rvf $database_path
        fi
        echo "create soft link."
        ln -sv $ssd_dir/database $database_path
    fi
}