#!/bin/bash

# ==============================
# LXD 本地镜像导入脚本（仅 LXC）
# ==============================

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'

LXC="/snap/bin/lxc"

ok()   { echo -e "${GREEN}[OK]${NC} $1"; }
err()  { echo -e "${RED}[ERROR]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
info() { echo -e "${BLUE}[INFO]${NC} $1"; }

reading() {
    read -rp "$(echo -e "${GREEN}[INPUT]${NC} $1")" "$2"
}

# ==============================
# 导入本地 alpine-322 镜像
# ==============================
menu_import() {
    echo
    info "=== 导入本地 LXC 镜像 ==="

    local image_path="/root/alpine-322.tar.gz"
    local alias="alpine-322-lxc"

    if [[ ! -f "$image_path" ]]; then
        err "未找到镜像文件: $image_path"
        return
    fi

    info "检测到本地镜像:"
    info "  路径: $image_path"
    info "  别名: $alias"

    if $LXC image import "$image_path" --alias "$alias"; then
        ok "镜像导入成功: $alias"
    else
        err "镜像导入失败"
    fi
}

# ==============================
# 查看已有镜像
# ==============================
menu_list() {
    echo
    info "=== 已有 LXC 镜像 ==="
    $LXC image list
}

# ==============================
# 删除镜像
# ==============================
menu_delete() {
    echo
    info "=== 删除 LXC 镜像 ==="
    $LXC image list
    echo

    reading "输入要删除的镜像别名或指纹: " image_id
    [[ -z "$image_id" ]] && return

    warn "确认删除镜像: $image_id ?"
    reading "确认？(y/n) [n]: " confirm

    if [[ "$confirm" =~ ^[yY]$ ]]; then
        if $LXC image delete "$image_id"; then
            ok "镜像已删除"
        else
            err "删除失败"
        fi
    else
        info "已取消"
    fi
}

# ==============================
# 主菜单
# ==============================
main_menu() {
    while true; do
        echo
        echo "================================"
        echo "     LXD 本地镜像管理（LXC）"
        echo "================================"
        echo "1. 导入本地镜像"
        echo "2. 查看已有镜像"
        echo "3. 删除镜像"
        echo "0. 退出"
        echo "================================"
        reading "请选择 [0-3]: " choice

        case "$choice" in
            1) menu_import ;;
            2) menu_list ;;
            3) menu_delete ;;
            0) ok "退出"; exit 0 ;;
            *) warn "无效选择" ;;
        esac
    done
}

main_menu
