#!/bin/bash

# Định nghĩa màu cho thông báo
Red='\033[0;31m'
Yellow='\033[0;33m'
Green='\033[0;32m'
NC='\033[0m'

# Đường dẫn lưu trạng thái ban đầu
BACKUP_DIR="/var/backups/network_settings"
mkdir -p $BACKUP_DIR

# Lựa chọn ngôn ngữ
echo -e "${Yellow}Select your language / Chọn ngôn ngữ:${NC}"
echo "1. English"
echo "2. Tiếng Việt"
read -p "Your choice / Lựa chọn của bạn (1/2): " lang_choice

# Đặt ngôn ngữ thông báo
if [[ $lang_choice -eq 1 ]]; then
    OPTIMIZE_MSG="Applying network optimizations..."
    BACKUP_MSG="Backing up current network settings..."
    ROLLBACK_MSG="Rolling back network settings..."
    DEFAULT_MSG="Restoring network interfaces to default settings..."
    COMPLETE_MSG="Operation completed successfully."
    INVALID_MSG="Invalid choice. Please try again."
    MENU_MSG="Please select an operation:"
    MENU_OPTIMIZE="1. Optimize Network"
    MENU_ROLLBACK="2. Rollback to Previous Settings"
    MENU_DEFAULT="3. Restore to Default Settings"
    EXIT_MSG="4. Exit"
    CHOICE_MSG="Your choice:"
else
    OPTIMIZE_MSG="Đang áp dụng tối ưu hóa mạng..."
    BACKUP_MSG="Đang sao lưu cấu hình mạng hiện tại..."
    ROLLBACK_MSG="Đang khôi phục cấu hình mạng trước đó..."
    DEFAULT_MSG="Đang khôi phục các giao diện mạng về trạng thái mặc định..."
    COMPLETE_MSG="Hoàn thành thao tác thành công."
    INVALID_MSG="Lựa chọn không hợp lệ. Vui lòng thử lại."
    MENU_MSG="Vui lòng chọn thao tác:"
    MENU_OPTIMIZE="1. Tối ưu hóa mạng"
    MENU_ROLLBACK="2. Khôi phục cài đặt trước đó"
    MENU_DEFAULT="3. Khôi phục cài đặt mặc định"
    EXIT_MSG="4. Thoát"
    CHOICE_MSG="Lựa chọn của bạn:"
fi

# Sao lưu trạng thái ban đầu của giao diện mạng
backup_network_settings() {
    echo -e "${Yellow}$BACKUP_MSG${NC}"
    for interface in $(ls /sys/class/net | grep -v lo); do
        ethtool -k $interface > $BACKUP_DIR/$interface.features
        ethtool -g $interface > $BACKUP_DIR/$interface.buffers
        ip link show $interface > $BACKUP_DIR/$interface.link
    done
    echo -e "${Green}$COMPLETE_MSG${NC}"
}

# Khôi phục trạng thái mạng
rollback_network_settings() {
    echo -e "${Red}$ROLLBACK_MSG${NC}"
    for interface in $(ls /sys/class/net | grep -v lo); do
        if [[ -f $BACKUP_DIR/$interface.features ]]; then
            while read -r line; do
                feature=$(echo $line | awk '{print $1}')
                status=$(echo $line | awk '{print $2}')
                ethtool -K $interface $feature $status 2>/dev/null
            done < <(grep "Features for" -A 50 $BACKUP_DIR/$interface.features | grep -E "on|off")
        fi

        if [[ -f $BACKUP_DIR/$interface.buffers ]]; then
            RX=$(grep "RX:" $BACKUP_DIR/$interface.buffers | awk '{print $2}')
            TX=$(grep "TX:" $BACKUP_DIR/$interface.buffers | awk '{print $2}')
            ethtool -G $interface rx $RX tx $TX 2>/dev/null
        fi

        if [[ -f $BACKUP_DIR/$interface.link ]]; then
            MTU=$(grep "mtu" $BACKUP_DIR/$interface.link | awk '{print $5}')
            ip link set $interface mtu $MTU 2>/dev/null
        fi
    done
    echo -e "${Green}$COMPLETE_MSG${NC}"
}

# Khôi phục trạng thái mặc định
restore_to_default() {
    echo -e "${Red}$DEFAULT_MSG${NC}"
    for interface in $(ls /sys/class/net | grep -v lo); do
        echo -e "${Yellow}- Resetting interface: $interface${NC}"
        ethtool -K $interface tso on gso on lro on gro on rx on tx on
        ethtool -G $interface rx 256 tx 256
        #ip link set $interface mtu 1500
    done
    echo -e "${Green}$COMPLETE_MSG${NC}"
}

# Tối ưu mạng
optimize_network() {
    echo -e "${Yellow}$OPTIMIZE_MSG${NC}"
    for interface in $(ls /sys/class/net | grep -v lo); do
        echo -e "${Yellow}- Optimizing interface: $interface${NC}"
        ethtool -K $interface tso off gso off lro off gro off
        ethtool -K $interface rx off tx off
        ethtool -G $interface rx 4096 tx 4096
        #ip link set $interface mtu 9000
    done
    echo -e "${Green}$COMPLETE_MSG${NC}"
}

# Hiển thị menu lựa chọn
while true; do
    echo -e "\n${Yellow}$MENU_MSG${NC}"
    echo -e "${Green}$MENU_OPTIMIZE${NC}"
    echo -e "${Green}$MENU_ROLLBACK${NC}"
    echo -e "${Green}$MENU_DEFAULT${NC}"
    echo -e "${Red}$EXIT_MSG${NC}"
    read -p "$CHOICE_MSG " choice

    case $choice in
        1)
            backup_network_settings
            optimize_network
            ;;
        2)
            rollback_network_settings
            ;;
        3)
            restore_to_default
            ;;
        4)
            echo -e "${Green}Exiting script. Goodbye! / Tạm biệt!${NC}"
            exit 0
            ;;
        *)
            echo -e "${Red}$INVALID_MSG${NC}"
            ;;
    esac
done

