#!/bin/bash

# ptyGitPull - Git pull + 모든 subtree pull 스크립트
# 사용법: ptyGitPull [브랜치명]
# 예시: ptyGitPull
#       ptyGitPull master

BRANCH="${1:-$(git branch --show-current)}"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

echo "=========================================="
echo "ptyGitPull - Git 및 Subtree 일괄 Pull"
echo "=========================================="
echo ""

# 0. 커밋되지 않은 변경 확인
if ! git diff-index --quiet HEAD -- 2>/dev/null; then
    echo "오류: 커밋되지 않은 변경 사항이 있습니다."
    echo ""
    echo "다음 중 하나를 수행하세요:"
    echo "  1. git stash        # 임시 저장"
    echo "  2. git commit       # 커밋"
    echo "  3. git checkout .   # 변경 취소"
    echo ""
    git status --short
    exit 1
fi

# Untracked 파일 확인 (경고만)
UNTRACKED=$(git ls-files --others --exclude-standard | wc -l | tr -d ' ')
if [ "$UNTRACKED" -gt 0 ]; then
    echo "경고: $UNTRACKED개의 추적되지 않은 파일이 있습니다."
    echo ""
fi

# 1. 메인 저장소 pull
echo "[1/2] 메인 저장소 pull 중..."
echo "  브랜치: $BRANCH"
echo ""

git pull origin "$BRANCH"

if [ $? -ne 0 ]; then
    echo ""
    echo "오류: 메인 저장소 pull에 실패했습니다."
    echo "충돌이 발생했다면 수동으로 해결 후 다시 시도하세요."
    exit 1
fi

echo ""
echo "완료: 메인 저장소 pull 성공"
echo ""

# 2. Subtree 찾기 및 pull
echo "[2/2] Subtree pull 중..."
echo ""

# origin을 제외한 모든 remote 중 동일한 이름의 폴더가 있는 것을 subtree로 간주
SUBTREE_COUNT=0
SUBTREE_SUCCESS=0
SUBTREE_FAIL=0

for REMOTE in $(git remote | grep -v '^origin$'); do
    # 해당 이름의 폴더가 존재하는지 확인
    if [ -d "$REMOTE" ]; then
        SUBTREE_COUNT=$((SUBTREE_COUNT + 1))
        echo "  [$SUBTREE_COUNT] Subtree 발견: $REMOTE"

        # ptyGitSubtreePull 스크립트 사용
        if [ -x "$SCRIPT_DIR/ptyGitSubtreePull" ]; then
            "$SCRIPT_DIR/ptyGitSubtreePull" "$REMOTE"
            if [ $? -eq 0 ]; then
                SUBTREE_SUCCESS=$((SUBTREE_SUCCESS + 1))
            else
                SUBTREE_FAIL=$((SUBTREE_FAIL + 1))
                echo "  경고: $REMOTE subtree pull 실패"
                echo "  수동으로 충돌을 해결하세요:"
                echo "    git subtree pull --prefix=$REMOTE $REMOTE main --squash"
            fi
        else
            # 직접 subtree pull 실행
            git subtree pull --prefix="$REMOTE" "$REMOTE" main --squash
            if [ $? -eq 0 ]; then
                SUBTREE_SUCCESS=$((SUBTREE_SUCCESS + 1))
            else
                SUBTREE_FAIL=$((SUBTREE_FAIL + 1))
                echo "  경고: $REMOTE subtree pull 실패"
            fi
        fi
        echo ""
    fi
done

# 3. 결과 요약
echo "=========================================="
echo "Pull 완료"
echo "=========================================="
echo "  메인 저장소: origin/$BRANCH"
if [ $SUBTREE_COUNT -gt 0 ]; then
    echo "  Subtree: $SUBTREE_SUCCESS 성공 / $SUBTREE_FAIL 실패 (총 $SUBTREE_COUNT개)"
else
    echo "  Subtree: 없음"
fi
echo ""

if [ $SUBTREE_FAIL -gt 0 ]; then
    echo "일부 subtree pull이 실패했습니다. 위의 안내를 참고하세요."
    exit 1
fi
