#!/bin/bash
# kubectl wrapper with automatic image pull fix
# 用途：自动检测并修复 ImagePullBackOff 问题

REAL_KUBECTL=$(which kubectl | grep -v "kubectl-auto-fix" | head -1)
if [[ -z "$REAL_KUBECTL" ]]; then
    REAL_KUBECTL="/usr/local/bin/kubectl"
fi

CACHE_SCRIPT="/Users/brunogao/work/codes/tools/macos/k8s/cache-image.sh"
LOG_FILE="/tmp/kubectl-auto-fix.log"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

log() {
    echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

log_user() {
    echo -e "$1"
}

# 执行原始命令
$REAL_KUBECTL "$@"
EXIT_CODE=$?

# 只在 apply/create/replace 命令后检查
if [[ "$1" =~ ^(apply|create|replace)$ ]] && [[ "$EXIT_CODE" -eq 0 ]]; then
    log "kubectl $* 执行成功，检查镜像拉取状态..."

    # 等待 Pod 创建
    sleep 3

    # 检查是否有 ImagePull 失败
    FAILED_DEPLOYS=$($REAL_KUBECTL get deployments --all-namespaces -o json 2>/dev/null | \
        jq -r '.items[] |
               select(.status.conditions[]? |
                      select(.type=="Available" and .status=="False" and
                             (.message | test("ImagePull|ErrImage")))) |
               "\(.metadata.namespace)/\(.metadata.name)"' 2>/dev/null)

    if [[ -n "$FAILED_DEPLOYS" ]]; then
        log_user ""
        log_user "${YELLOW}⚠️  检测到镜像拉取失败，自动修复中...${NC}"
        log_user ""

        declare -A FIXED

        while IFS= read -r deploy; do
            [[ -z "$deploy" ]] && continue
            [[ -n "${FIXED[$deploy]}" ]] && continue

            log "自动修复: $deploy"
            log_user "${BLUE}🔧 修复 Deployment: $deploy${NC}"

            if [[ -x "$CACHE_SCRIPT" ]]; then
                if "$CACHE_SCRIPT" --update-deployment "$deploy" >> "$LOG_FILE" 2>&1; then
                    log_user "${GREEN}   ✅ 修复成功${NC}"
                    log "修复成功: $deploy"
                    FIXED[$deploy]=1
                else
                    log_user "${RED}   ❌ 修复失败${NC}"
                    log_user "${YELLOW}   查看日志: tail -f $LOG_FILE${NC}"
                    log "修复失败: $deploy"
                fi
            else
                log_user "${RED}   ❌ 缓存脚本不存在: $CACHE_SCRIPT${NC}"
                log "缓存脚本不存在"
            fi
        done <<< "$FAILED_DEPLOYS"

        if [[ ${#FIXED[@]} -gt 0 ]]; then
            log_user ""
            log_user "${GREEN}✅ 自动修复完成，共修复 ${#FIXED[@]} 个 Deployment${NC}"
            log_user "${BLUE}💡 提示：等待几秒后运行 'kubectl get pods' 查看状态${NC}"
            log_user ""
        fi
    fi
fi

exit $EXIT_CODE
