#!/bin/bash

show_header() {
    clear
    echo "=================================================================="
    echo "           ENTERPRISE LAB ENVIRONMENT - DUCLA CLOUD"
    echo "=================================================================="
    echo ""
}

show_main_menu() {
    show_header
    echo "🚀 MENU CHÍNH - Chọn môi trường triển khai:"
    echo ""
    echo "1)  📦 Cài đặt môi trường cơ bản"
    echo "2)  🖥️  Triển khai Virtual Machines"
    echo "3)  🔧 Triển khai với Ansible"
    echo "4)  ☁️  OpenStack Deployments"
    echo "5)  🐳 Container Lab"
    echo "6)  🌐 Cloud Tools"
    echo "7)  📊 Quản lý Environment"
    echo "8)  🧪 Testing & Validation"
    echo "9)  ❓ Help & Documentation"
    echo "0)  🚪 Thoát"
    echo ""
    echo "=================================================================="
    read -p "Nhập lựa chọn [0-9]: " choice
}

setup_menu() {
    show_header
    echo "📦 CÀI ĐẶT MÔI TRƯỜNG CƠ BẢN:"
    echo ""
    echo "1) VirtualBox + Vagrant"
    echo "2) Ansible"
    echo "3) Container Lab (Docker + Minikube)"
    echo "4) Cloud Tools (AWS + Azure + GCP)"
    echo "5) Cài đặt tất cả"
    echo "0) Quay lại menu chính"
    echo ""
    read -p "Nhập lựa chọn [0-5]: " setup_choice
    
    case $setup_choice in
        1) cd vagrant-install && ./setup-complete.sh ;;
        2) cd ansible-deployment && ./setup-ansible.sh ;;
        3) cd container-lab && ./setup-container-lab.sh ;;
        4) cd cloud-tools && ./setup-cloud-tools.sh all ;;
        5) 
            echo "Cài đặt tất cả môi trường..."
            cd vagrant-install && ./setup-complete.sh
            cd ../ansible-deployment && ./setup-ansible.sh
            cd ../container-lab && ./setup-container-lab.sh
            cd ../cloud-tools && ./setup-cloud-tools.sh all
            ;;
        0) return ;;
        *) echo "Lựa chọn không hợp lệ!" ;;
    esac
    read -p "Nhấn Enter để tiếp tục..."
}

vm_menu() {
    show_header
    echo "🖥️ TRIỂN KHAI VIRTUAL MACHINES:"
    echo ""
    echo "1) OS cơ bản (Oracle Linux 8 + Ubuntu 22.04)"
    echo "2) Oracle Database Single Instance"
    echo "3) Oracle RAC (2 nodes)"
    echo "0) Quay lại menu chính"
    echo ""
    read -p "Nhập lựa chọn [0-3]: " vm_choice
    
    case $vm_choice in
        1) cd vm-deployments && ./deploy-all.sh ;;
        2) cd oracle-db-deployments && ./deploy-oracle-db.sh ;;
        3) cd oracle-db-deployments && ./deploy-oracle-rac.sh ;;
        0) return ;;
        *) echo "Lựa chọn không hợp lệ!" ;;
    esac
    read -p "Nhấn Enter để tiếp tục..."
}

ansible_menu() {
    show_header
    echo "🔧 TRIỂN KHAI VỚI ANSIBLE:"
    echo ""
    echo "1) PostgreSQL đơn lẻ"
    echo "2) PostgreSQL Master-Replica"
    echo "3) Pacemaker HA Cluster"
    echo "4) MySQL đơn lẻ"
    echo "5) MySQL Master-Slave Cluster"
    echo "0) Quay lại menu chính"
    echo ""
    read -p "Nhập lựa chọn [0-5]: " ansible_choice
    
    case $ansible_choice in
        1) cd ansible-deployment && ./deploy-complete.sh ;;
        2) cd ansible-deployment/postgres-replica && ./deploy-replica-complete.sh ;;
        3) cd ansible-deployment/pacemaker-cluster && ./deploy-pacemaker-complete.sh ;;
        4) cd ansible-deployment/mysql-deployment && ./deploy-mysql-complete.sh ;;
        5) cd ansible-deployment/mysql-cluster && ./deploy-cluster-complete.sh ;;
        0) return ;;
        *) echo "Lựa chọn không hợp lệ!" ;;
    esac
    read -p "Nhấn Enter để tiếp tục..."
}

openstack_menu() {
    show_header
    echo "☁️ OPENSTACK DEPLOYMENTS:"
    echo ""
    echo "1) DevStack (Development - 1 VM)"
    echo "2) Kolla-Ansible (Containers - 2 VMs)"
    echo "3) OpenStack-Ansible (LXC - 4 VMs)"
    echo "0) Quay lại menu chính"
    echo ""
    read -p "Nhập lựa chọn [0-3]: " openstack_choice
    
    case $openstack_choice in
        1) cd openstack-deployments && ./deploy-openstack.sh devstack ;;
        2) cd openstack-deployments && ./deploy-openstack.sh kolla ;;
        3) cd openstack-deployments && ./deploy-openstack.sh osa ;;
        0) return ;;
        *) echo "Lựa chọn không hợp lệ!" ;;
    esac
    read -p "Nhấn Enter để tiếp tục..."
}

container_menu() {
    show_header
    echo "🐳 CONTAINER LAB:"
    echo ""
    echo "1) Khởi động Minikube"
    echo "2) Khởi động Docker Services"
    echo "3) Test Environment"
    echo "4) Dừng tất cả Container Services"
    echo "0) Quay lại menu chính"
    echo ""
    read -p "Nhập lựa chọn [0-4]: " container_choice
    
    case $container_choice in
        1) cd container-lab && ./start-minikube.sh ;;
        2) cd container-lab/examples && docker-compose up -d ;;
        3) cd container-lab && ./test-environment.sh ;;
        4) 
            cd container-lab/examples && docker-compose down
            minikube stop
            ;;
        0) return ;;
        *) echo "Lựa chọn không hợp lệ!" ;;
    esac
    read -p "Nhấn Enter để tiếp tục..."
}

cloud_menu() {
    show_header
    echo "🌐 CLOUD TOOLS:"
    echo ""
    echo "1) Cài đặt AWS Tools"
    echo "2) Cài đặt Azure Tools"
    echo "3) Cài đặt GCP Tools"
    echo "4) Cài đặt tất cả Cloud Tools"
    echo "5) Kiểm tra Cloud Tools"
    echo "0) Quay lại menu chính"
    echo ""
    read -p "Nhập lựa chọn [0-5]: " cloud_choice
    
    case $cloud_choice in
        1) cd cloud-tools && ./setup-cloud-tools.sh aws ;;
        2) cd cloud-tools && ./setup-cloud-tools.sh azure ;;
        3) cd cloud-tools && ./setup-cloud-tools.sh gcp ;;
        4) cd cloud-tools && ./setup-cloud-tools.sh all ;;
        5) cd cloud-tools && ./check-cloud-tools.sh ;;
        0) return ;;
        *) echo "Lựa chọn không hợp lệ!" ;;
    esac
    read -p "Nhấn Enter để tiếp tục..."
}

management_menu() {
    show_header
    echo "📊 QUẢN LÝ ENVIRONMENT:"
    echo ""
    echo "1) Kiểm tra trạng thái tất cả VMs"
    echo "2) Dừng tất cả VMs"
    echo "3) Khởi động lại tất cả VMs"
    echo "4) Reset environment (Xóa tất cả VMs)"
    echo "5) Backup environment"
    echo "0) Quay lại menu chính"
    echo ""
    read -p "Nhập lựa chọn [0-5]: " mgmt_choice
    
    case $mgmt_choice in
        1) 
            echo "Kiểm tra trạng thái VMs..."
            vagrant global-status
            ;;
        2) 
            echo "Dừng tất cả VMs..."
            vagrant global-status | grep running | awk '{print $1}' | xargs -I {} vagrant halt {}
            ;;
        3) 
            echo "Khởi động lại tất cả VMs..."
            vagrant global-status | grep poweroff | awk '{print $1}' | xargs -I {} vagrant up {}
            ;;
        4) 
            read -p "⚠️ Bạn có chắc muốn xóa tất cả VMs? (y/N): " confirm
            if [[ $confirm == [yY] ]]; then
                vagrant global-status --prune
                vagrant destroy -f
            fi
            ;;
        5) 
            echo "Tạo snapshot cho tất cả VMs..."
            vagrant snapshot save backup-$(date +%Y%m%d-%H%M%S)
            ;;
        0) return ;;
        *) echo "Lựa chọn không hợp lệ!" ;;
    esac
    read -p "Nhấn Enter để tiếp tục..."
}

testing_menu() {
    show_header
    echo "🧪 TESTING & VALIDATION:"
    echo ""
    echo "1) Test PostgreSQL Replication"
    echo "2) Test Pacemaker Failover"
    echo "3) Test MySQL Replication"
    echo "4) Test Container Environment"
    echo "5) Test tất cả Database Connections"
    echo "0) Quay lại menu chính"
    echo ""
    read -p "Nhập lựa chọn [0-5]: " test_choice
    
    case $test_choice in
        1) cd ansible-deployment/postgres-replica && ./test-replication.sh ;;
        2) cd ansible-deployment/pacemaker-cluster && ./test-failover.sh ;;
        3) cd ansible-deployment/mysql-cluster && ./test-replication.sh ;;
        4) cd container-lab && ./test-environment.sh ;;
        5) 
            echo "Testing database connections..."
            echo "PostgreSQL: psql -h 192.168.56.40 -U postgres -d testdb"
            echo "MySQL: mysql -h 192.168.56.70 -u dbuser -p testdb"
            echo "Container PostgreSQL: psql -h localhost -p 5433 -U labuser -d labdb"
            ;;
        0) return ;;
        *) echo "Lựa chọn không hợp lệ!" ;;
    esac
    read -p "Nhấn Enter để tiếp tục..."
}

help_menu() {
    show_header
    echo "❓ HELP & DOCUMENTATION:"
    echo ""
    echo "📋 Thông tin Services:"
    echo "  - PostgreSQL: 192.168.56.40:5432 (postgres/postgres123)"
    echo "  - MySQL: 192.168.56.70:3306 (root/mysql123)"
    echo "  - OpenStack DevStack: 192.168.56.80 (admin/admin123)"
    echo "  - Docker Nginx: localhost:8080"
    echo "  - Minikube: minikube ip"
    echo ""
    echo "📚 Documentation:"
    echo "  - README.md: Hướng dẫn chi tiết"
    echo "  - Mỗi folder có README.md riêng"
    echo ""
    echo "📧 Support:"
    echo "  - Email: ducla.bacha@gmail.com"
    echo "  - GitHub: Enterprise Lab Environment"
    echo ""
    echo "⚙️ System Requirements:"
    echo "  - RAM: 16GB+ (64GB cho OpenStack)"
    echo "  - CPU: 4+ cores"
    echo "  - Disk: 100GB+ free space"
    echo ""
    read -p "Nhấn Enter để quay lại menu chính..."
}

# Main loop
while true; do
    show_main_menu
    
    case $choice in
        1) setup_menu ;;
        2) vm_menu ;;
        3) ansible_menu ;;
        4) openstack_menu ;;
        5) container_menu ;;
        6) cloud_menu ;;
        7) management_menu ;;
        8) testing_menu ;;
        9) help_menu ;;
        0) 
            echo "Cảm ơn bạn đã sử dụng Enterprise Lab Environment!"
            echo "© 2024 DUCLA CLOUD - ducla.bacha@gmail.com"
            exit 0
            ;;
        *) 
            echo "Lựa chọn không hợp lệ! Vui lòng chọn từ 0-9."
            read -p "Nhấn Enter để tiếp tục..."
            ;;
    esac
done