#!/bin/bash

# aa - Docker Compose 管理脚本
# 使用方法: aa [up|down|restart|status|logs|ps]

SCRIPT_NAME=$(basename "$0")
COMPOSE_FILE="docker-compose.yml"

# 显示帮助信息
show_help() {
    echo "使用方法: $SCRIPT_NAME [command]"
    echo ""
    echo "命令:"
    echo "  up          启动服务 (docker compose up -d)"
    echo "  down        停止服务 (docker compose down)"
    echo "  restart     重启服务"
    echo "  status      查看服务状态"
    echo "  logs        查看日志"
    echo "  ps          查看容器状态"
    echo "  help        显示此帮助信息"
    echo ""
    echo "示例:"
    echo "  $SCRIPT_NAME up"
    echo "  $SCRIPT_NAME down"
    echo "  $SCRIPT_NAME logs"
}

# 检查 docker compose 是否可用
check_docker_compose() {
    if ! command -v docker &> /dev/null; then
        echo "错误: Docker 未安装或未在 PATH 中"
        exit 1
    fi
    
    # 检查是使用 docker-compose 还是 docker compose
    if command -v docker-compose &> /dev/null; then
        COMPOSE_CMD="docker-compose"
    elif docker compose version &> /dev/null; then
        COMPOSE_CMD="docker compose"
    else
        echo "错误: docker-compose 未安装"
        exit 1
    fi
}

# 检查 compose 文件是否存在
check_compose_file() {
    if [ ! -f "$COMPOSE_FILE" ] && [ ! -f "docker-compose.yaml" ]; then
        echo "错误: 在当前目录未找到 docker-compose.yml 或 docker-compose.yaml"
        echo "当前目录: $(pwd)"
        exit 1
    fi
}

# 启动服务
start_services() {
    echo "启动 Docker Compose 服务..."
    check_compose_file
    $COMPOSE_CMD up -d
    echo "服务启动完成"
}

# 停止服务
stop_services() {
    echo "停止 Docker Compose 服务..."
    check_compose_file
    $COMPOSE_CMD down
    echo "服务停止完成"
}

# 重启服务
restart_services() {
    echo "重启 Docker Compose 服务..."
    check_compose_file
    $COMPOSE_CMD restart
    echo "服务重启完成"
}

# 查看服务状态
show_status() {
    echo "Docker Compose 服务状态:"
    check_compose_file
    $COMPOSE_CMD ps
}

# 查看日志
show_logs() {
    echo "Docker Compose 日志:"
    check_compose_file
    $COMPOSE_CMD logs "$@"
}

# 查看容器状态
show_ps() {
    echo "Docker 容器状态:"
    docker ps
}

# 主程序
main() {
    check_docker_compose
    
    case "$1" in
        up|start)
            start_services
            ;;
        down|stop)
            stop_services
            ;;
        restart)
            restart_services
            ;;
        status)
            show_status
            ;;
        logs)
            shift
            show_logs "$@"
            ;;
        ps)
            show_ps
            ;;
        help|--help|-h)
            show_help
            ;;
        *)
            if [ -z "$1" ]; then
                echo "错误: 请提供命令参数"
                echo ""
                show_help
            else
                echo "错误: 未知命令 '$1'"
                echo ""
                show_help
            fi
            exit 1
            ;;
    esac
}

# 执行主程序
main "$@"
