#!/bin/bash

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

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

echo "=========================================="
echo "ptyGitPush - Git 및 Subtree 일괄 Push"
echo "=========================================="
echo ""

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

git push origin "$BRANCH"

if [ $? -ne 0 ]; then
    echo ""
    echo "오류: 메인 저장소 push에 실패했습니다."
    exit 1
fi

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

# 2. Subtree 찾기 및 push
echo "[2/2] Subtree push 중..."
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"

        # ptyGitSubtreePush 스크립트 사용
        if [ -x "$SCRIPT_DIR/ptyGitSubtreePush" ]; then
            "$SCRIPT_DIR/ptyGitSubtreePush" "$REMOTE"
            if [ $? -eq 0 ]; then
                SUBTREE_SUCCESS=$((SUBTREE_SUCCESS + 1))
            else
                SUBTREE_FAIL=$((SUBTREE_FAIL + 1))
                echo "  경고: $REMOTE subtree push 실패"
            fi
        else
            # 직접 subtree push 실행
            git subtree push --prefix="$REMOTE" "$REMOTE" main
            if [ $? -eq 0 ]; then
                SUBTREE_SUCCESS=$((SUBTREE_SUCCESS + 1))
            else
                SUBTREE_FAIL=$((SUBTREE_FAIL + 1))
                echo "  경고: $REMOTE subtree push 실패"
            fi
        fi
        echo ""
    fi
done

# 3. 결과 요약
echo "=========================================="
echo "Push 완료"
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
    exit 1
fi
