#!/bin/bash

# Kiểm tra quyền root
if [[ $EUID -ne 0 ]]; then
    echo "This script must be run as root."
    echo "Script này cần chạy với quyền root."
    exit 1
fi

# Chọn ngôn ngữ / Select language
echo "Select your language / Chọn ngôn ngữ:"
echo "1. English"
echo "2. Tiếng Việt"
read -p "Enter your choice (1/2): " lang_choice

if [[ $lang_choice == "1" ]]; then
    LANG="en"
elif [[ $lang_choice == "2" ]]; then
    LANG="vi"
else
    echo "Invalid choice. Defaulting to English."
    LANG="en"
fi

# Hàm hiển thị thông báo đa ngôn ngữ / Multilingual output function
function print_msg {
    case $1 in
        install_keepalived)
            [[ $LANG == "en" ]] && echo "Installing Keepalived..." || echo "Đang cài đặt Keepalived..."
            ;;
        enter_interface)
            [[ $LANG == "en" ]] && echo "Enter the interface name (e.g., ens192):" || echo "Nhập tên giao diện mạng (ví dụ: ens192):"
            ;;
        enter_router_id)
            [[ $LANG == "en" ]] && echo "Enter the virtual_router_id (e.g., 50):" || echo "Nhập virtual_router_id (ví dụ: 50):"
            ;;
        enter_vip)
            [[ $LANG == "en" ]] && echo "Enter the virtual IP address (e.g., 10.0.0.12):" || echo "Nhập địa chỉ VIP ảo (ví dụ: 10.0.0.12):"
            ;;
        config_summary)
            [[ $LANG == "en" ]] && echo "Your configuration:" || echo "Cấu hình của bạn:"
            ;;
        confirm_config)
            [[ $LANG == "en" ]] && echo "Confirm (y/n)?" || echo "Xác nhận (y/n)?"
            ;;
        cancel_config)
            [[ $LANG == "en" ]] && echo "Configuration canceled." || echo "Hủy bỏ cấu hình."
            ;;
        creating_config)
            [[ $LANG == "en" ]] && echo "Creating Keepalived configuration..." || echo "Đang tạo cấu hình Keepalived..."
            ;;
        starting_service)
            [[ $LANG == "en" ]] && echo "Starting Keepalived service..." || echo "Khởi động dịch vụ Keepalived..."
            ;;
        status_service)
            [[ $LANG == "en" ]] && echo "Keepalived service status:" || echo "Trạng thái dịch vụ Keepalived:"
            ;;
        config_sysctl)
            [[ $LANG == "en" ]] && echo "Configuring sysctl for ARP settings..." || echo "Đang cấu hình sysctl cho các tham số ARP..."
            ;;
        *)
            echo "$1"
            ;;
    esac
}

# Cài đặt Keepalived
print_msg "install_keepalived"
yum install -y keepalived || apt-get install -y keepalived

# Cấu hình sysctl cho ARP / Configure sysctl for ARP settings
print_msg "config_sysctl"
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.default.arp_ignore=1
sysctl -w net.ipv4.conf.default.arp_announce=2
sysctl -w net.ipv4.conf.$interface_name.arp_ignore=1
sysctl -w net.ipv4.conf.$interface_name.arp_announce=2

# Lưu cấu hình sysctl / Save sysctl settings
echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.arp_announce = 2" >> /etc/sysctl.conf
echo "net.ipv4.conf.$interface_name.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.$interface_name.arp_announce = 2" >> /etc/sysctl.conf

# Áp dụng thay đổi sysctl / Apply sysctl changes
sysctl -p

# Yêu cầu nhập thông tin từ người dùng / Prompt user for input
print_msg "enter_interface"
read interface_name
print_msg "enter_router_id"
read router_id
print_msg "enter_vip"
read vip_address

# Xác nhận thông tin / Confirm configuration
print_msg "config_summary"
echo "Interface: $interface_name"
echo "Virtual Router ID: $router_id"
echo "Virtual IP Address: $vip_address"
print_msg "confirm_config"
read confirm
if [[ $confirm != "y" ]]; then
    print_msg "cancel_config"
    exit 1
fi

# Tạo tệp cấu hình Keepalived / Create Keepalived configuration
print_msg "creating_config"
cat <<EOF > /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface $interface_name
    virtual_router_id $router_id
    garp_master_refresh 10
    nopreempt
    authentication {
        auth_type PASS
        auth_pass thuannd
    }
    virtual_ipaddress {
        $vip_address
    }
    garp_master_refresh 10
    garp_master_refresh_repeat 2
}
EOF

# Khởi động và kích hoạt dịch vụ Keepalived / Start and enable Keepalived service
print_msg "starting_service"
systemctl enable keepalived
systemctl start keepalived

# Hiển thị trạng thái dịch vụ / Show service status
print_msg "status_service"
systemctl status keepalived --no-pager

