#!/bin/bash
# tmux 세션 모니터링 도구

show_help() {
    cat << EOF
╔════════════════════════════════════════╗
║     Tmux 세션 모니터링 도구           ║
╚════════════════════════════════════════╝

사용법: $0 <패턴>

  패턴:
    *           - 모든 tmux 세션 모니터링
    abcd*       - 'abcd'로 시작하는 세션만 모니터링
    *xyz        - 'xyz'로 끝나는 세션만 모니터링
    *word*      - 'word'가 포함된 세션만 모니터링
    session_1   - 정확한 세션명 모니터링

  예제:
    $0 '*'          # 모든 세션
    $0 'ai_*'       # ai_로 시작하는 모든 세션
    $0 'worker*'    # worker로 시작하는 세션
    $0 'my_session' # 특정 세션

EOF

    echo "현재 실행 중인 세션:"
    echo "─────────────────────────────────────────"
    if tmux list-sessions 2>/dev/null | grep -v "^monitor_dashboard:"; then
        :
    else
        echo "  (실행 중인 세션 없음)"
    fi
    echo ""

    exit 0
}

monitor_dashboard() {
    local pattern="$1"
    local monitor_session="monitor_dashboard"

    # 패턴에 맞는 세션 찾기
    local sessions=()
    if [[ "$pattern" == "*" ]]; then
        # 모든 세션 (자연스러운 정렬)
        while IFS= read -r session; do
            sessions+=("$session")
        done < <(tmux list-sessions -F "#{session_name}" 2>/dev/null | grep -v "^${monitor_session}$" | sort -V)
    else
        # 패턴 매칭 (bash glob을 grep 패턴으로 변환)
        local grep_pattern="${pattern}"
        grep_pattern="${grep_pattern//\*/.*}"  # * -> .*
        grep_pattern="^${grep_pattern}$"       # 전체 매칭

        while IFS= read -r session; do
            sessions+=("$session")
        done < <(tmux list-sessions -F "#{session_name}" 2>/dev/null | grep -v "^${monitor_session}$" | grep -E "$grep_pattern" | sort -V)
    fi

    # 세션이 없으면 에러
    if [[ ${#sessions[@]} -eq 0 ]]; then
        echo "❌ 패턴 '${pattern}'에 맞는 세션이 없습니다."
        echo ""
        echo "현재 실행 중인 세션:"
        tmux list-sessions 2>/dev/null || echo "  (없음)"
        exit 1
    fi

    # 기존 모니터 세션 제거
    tmux kill-session -t "$monitor_session" 2>/dev/null

    echo "📺 모니터링 세션: ${sessions[*]}"
    echo "✅ 대시보드 생성 중..."

    # 새 세션 생성
    tmux new-session -d -s "$monitor_session"

    # 첫 번째 pane
    tmux send-keys -t "$monitor_session" \
        "watch -n 1 --color 'tmux capture-pane -t ${sessions[0]} -e -p | tail -30'" C-m

    # 나머지 pane들 추가
    for ((i=1; i<${#sessions[@]}; i++)); do
        tmux split-window -t "$monitor_session" -v
        tmux select-layout -t "$monitor_session" tiled
        tmux send-keys -t "$monitor_session" \
            "watch -n 1 --color 'tmux capture-pane -t ${sessions[$i]} -e -p | tail -30'" C-m
    done

    tmux select-layout -t "$monitor_session" tiled

    echo "✅ 대시보드 생성 완료 (${#sessions[@]}개 세션)"
    sleep 0.5
    tmux attach -t "$monitor_session"
}

# 메인
if [[ $# -eq 0 ]]; then
    show_help
fi

PATTERN="$1"
monitor_dashboard "$PATTERN"
