#!/bin/bash

# Thư mục chứa các file cấu hình mạng
CONFIG_DIR="/etc/sysconfig/network-scripts"

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

    if [[ $lang_choice == "1" ]]; then
        LANG=vi
    else
        LANG=en
    fi
}

# Hiển thị thông báo đa ngôn ngữ
translate() {
    local key=$1
    declare -A messages

    messages["vi:check_network_manager"]="Kiểm tra hệ thống đang dùng NetworkManager"
    messages["en:check_network_manager"]="Checking if the system is using NetworkManager"

    messages["vi:using_network_scripts"]="Hệ thống đã sử dụng network scripts."
    messages["en:using_network_scripts"]="The system is already using network scripts."

    messages["vi:interfaces_up"]="Các interface đang UP:"
    messages["en:interfaces_up"]="Interfaces currently UP:"

    echo "${messages["$LANG:$key"]}"
}

# Kiểm tra hệ thống đang dùng NetworkManager
check_network_manager() {
    translate "check_network_manager"
    if systemctl is-active --quiet NetworkManager; then
        if [[ $LANG == "vi" ]]; then
            echo "NetworkManager đang chạy. Chuyển sang chế độ sử dụng network scripts..."
        else
            echo "NetworkManager is active. Switching to network scripts mode..."
        fi
        systemctl stop NetworkManager
        systemctl disable NetworkManager
        systemctl enable network
        systemctl start network
        if [[ $LANG == "vi" ]]; then
            echo "Đã chuyển sang chế độ sử dụng network scripts."
        else
            echo "Switched to network scripts mode."
        fi
    else
        translate "using_network_scripts"
    fi
}

# Hiển thị các interface đang UP
list_interfaces_up() {
    translate "interfaces_up"
    ip link show up | grep -E "^[0-9]+:" | awk -F': ' '{print $2}' | grep -v "lo"
}

# Xóa các file config *_slave*, *_vlan*
cleanup_configs() {
    if [[ $LANG == "vi" ]]; then
        echo "Xóa các file cấu hình không cần thiết..."
        echo "Đã xóa các file cấu hình liên quan."
    else
        echo "Removing unnecessary configuration files..."
        echo "Configuration files removed."
    fi
    rm -f ${CONFIG_DIR}/*_slave* ${CONFIG_DIR}/*_vlan*
}

# Tạo file cấu hình interface vật lý
create_physical_config() {
    local interface_name=$1
    local bond_name=$2
    cat <<EOF > ${CONFIG_DIR}/ifcfg-${interface_name}
TYPE=Ethernet
BOOTPROTO=none
NAME=${interface_name}
DEVICE=${interface_name}
ONBOOT=yes
MASTER=${bond_name}
SLAVE=yes
EOF
    if [[ $LANG == "vi" ]]; then
        echo "Đã tạo cấu hình cho interface vật lý: ${interface_name}"
    else
        echo "Created configuration for physical interface: ${interface_name}"
    fi
}

# Tạo file cấu hình bond không VLAN
create_bond_config() {
    local bond_name=$1
    local ip_address=$2
    local prefix=$3
    local gateway=$4
    cat <<EOF > ${CONFIG_DIR}/ifcfg-${bond_name}
TYPE=Ethernet
BOOTPROTO=none
NAME=${bond_name}
DEVICE=${bond_name}
BONDING_MASTER=yes
IPADDR=${ip_address}
PREFIX=${prefix}
GATEWAY=${gateway}
BONDING_OPTS="mode=4 miimon=100 lacp_rate=1 xmit_hash_policy=1"
EOF
    if [[ $LANG == "vi" ]]; then
        echo "Đã tạo cấu hình cho bond không VLAN: ${bond_name}"
    else
        echo "Created configuration for bond without VLAN: ${bond_name}"
    fi
}

# Tạo file cấu hình bond có VLAN
create_bond_vlan_config() {
    local bond_name=$1
    cat <<EOF > ${CONFIG_DIR}/ifcfg-${bond_name}
TYPE=Ethernet
BOOTPROTO=none
NAME=${bond_name}
DEVICE=${bond_name}
ONBOOT=yes
BONDING_OPTS="mode=4 miimon=100 lacp_rate=1 xmit_hash_policy=1"
EOF
    if [[ $LANG == "vi" ]]; then
        echo "Đã tạo cấu hình cho bond có VLAN: ${bond_name}"
    else
        echo "Created configuration for bond with VLAN: ${bond_name}"
    fi
}

# Tạo file cấu hình VLAN
create_vlan_config() {
    local bond_name=$1
    local vlan_id=$2
    local ip_address=$3
    local prefix=$4
    local gateway=$5
    cat <<EOF > ${CONFIG_DIR}/ifcfg-${bond_name}.${vlan_id}
TYPE=Ethernet
BOOTPROTO=none
NAME=${bond_name}.${vlan_id}
DEVICE=${bond_name}.${vlan_id}
ONBOOT=yes
VLAN=yes
IPADDR=${ip_address}
PREFIX=${prefix}
GATEWAY=${gateway}
EOF
    if [[ $LANG == "vi" ]]; then
        echo "Đã tạo cấu hình VLAN: ${bond_name}.${vlan_id}"
    else
        echo "Created VLAN configuration: ${bond_name}.${vlan_id}"
    fi
}

# Main logic
choose_language
check_network_manager
cleanup_configs
list_interfaces_up

if [[ $LANG == "vi" ]]; then
    echo -n "Nhập tên bond (vd: bond0): "
else
    echo -n "Enter bond name (e.g., bond0): "
fi
read bond_name

if [[ $LANG == "vi" ]]; then
    echo "Danh sách các interface đang UP:"
else
    echo "List of interfaces currently UP:"
fi
list_interfaces_up

if [[ $LANG == "vi" ]]; then
    echo -n "Nhập các interface cần join vào bond (cách nhau bằng khoảng trắng): "
else
    echo -n "Enter interfaces to join bond (space-separated): "
fi
read interfaces

for interface in $interfaces; do
    create_physical_config $interface $bond_name
    if [[ $LANG == "vi" ]]; then
        echo "$interface đã được thêm vào bond $bond_name."
    else
        echo "$interface has been added to bond $bond_name."
    fi
done

if [[ $LANG == "vi" ]]; then
    echo -n "Bond này có sử dụng VLAN không? (y/n): "
else
    echo -n "Does this bond use VLAN? (y/n): "
fi
read use_vlan

if [[ $use_vlan == "y" ]]; then
    create_bond_vlan_config $bond_name

    while true; do
        if [[ $LANG == "vi" ]]; then
            echo -n "Nhập VLAN ID: "
        else
            echo -n "Enter VLAN ID: "
        fi
        read vlan_id

        if [[ $LANG == "vi" ]]; then
            echo -n "Nhập IP Address: "
        else
            echo -n "Enter IP Address: "
        fi
        read ip_address

        if [[ $LANG == "vi" ]]; then
            echo -n "Nhập Network Prefix: "
        else
            echo -n "Enter Network Prefix: "
        fi
        read prefix

        if [[ $LANG == "vi" ]]; then
            echo -n "Nhập Gateway: "
        else
            echo -n "Enter Gateway: "
        fi
        read gateway

        create_vlan_config $bond_name $vlan_id $ip_address $prefix $gateway

        if [[ $LANG == "vi" ]]; then
            echo -n "Bạn có muốn tạo thêm VLAN khác không? (y/n): "
        else
            echo -n "Do you want to create another VLAN? (y/n): "
        fi
        read add_more_vlan
        [[ $add_more_vlan != "y" ]] && break
    done
else
    if [[ $LANG == "vi" ]]; then
        echo -n "Nhập IP Address: "
    else
        echo -n "Enter IP Address: "
    fi
    read ip_address

    if [[ $LANG == "vi" ]]; then
        echo -n "Nhập Network Prefix: "
    else
        echo -n "

