#!/bin/bash
#
# ptyGitCommit
#
# Claude를 사용해서 커밋 메시지를 자동 생성하고 커밋합니다.
#
# Usage: ptyGitCommit [메시지] [옵션]
#
# 옵션:
#   --force    확인 없이 바로 커밋
#   --push     커밋 후 push
#   --help     도움말

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

# 옵션 파싱
USER_MSG=""
FORCE=false
DO_PUSH=false

for arg in "$@"; do
    case $arg in
        --force)
            FORCE=true
            ;;
        --push)
            DO_PUSH=true
            ;;
        --help)
            echo "사용법: $0 [메시지] [옵션]"
            echo ""
            echo "옵션:"
            echo "  --force    확인 없이 바로 커밋"
            echo "  --push     커밋 후 push"
            echo "  --help     도움말"
            echo ""
            echo "예시:"
            echo "  $0                      # 자동 생성 메시지로 커밋 (확인 필요)"
            echo "  $0 \"버그 수정\"          # 사용자 메시지 + 자동 생성"
            echo "  $0 --force              # 확인 없이 커밋"
            echo "  $0 --force --push       # 확인 없이 커밋 + push"
            echo "  $0 \"기능 추가\" --force --push"
            exit 0
            ;;
        --*)
            # 알 수 없는 옵션은 무시
            ;;
        *)
            # 옵션이 아니면 사용자 메시지로 처리
            if [ -z "$USER_MSG" ]; then
                USER_MSG="$arg"
            fi
            ;;
    esac
done

echo "커밋 메세지를 작성중..."

# claude 출력을 변수에 저장
COMMIT_MSG=$(claude -p "$(cat "$SCRIPT_DIR/ptyGitCommit.prompt")")

if [ -z "$COMMIT_MSG" ]; then
    echo "커밋 메세지 생성 실패"
    exit 1
fi

# 사용자 메시지가 있으면 앞에 추가
if [ -n "$USER_MSG" ]; then
    COMMIT_MSG="$USER_MSG

$COMMIT_MSG"
fi

# 생성된 메세지 표시
echo ""
echo "=========================================="
echo "생성된 커밋 메세지:"
echo "=========================================="
echo "$COMMIT_MSG"
echo "=========================================="
echo ""

# 확인 (--force가 아닐 때만)
if [ "$FORCE" = true ]; then
    confirm="y"
else
    read -p "이 메세지로 커밋하시겠습니까? (y/n): " confirm
fi

if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
    git commit -m "$COMMIT_MSG"
    echo "커밋 완료!"

    # --push 옵션이 있으면 push
    if [ "$DO_PUSH" = true ]; then
        echo ""
        echo "push 중..."
        git push
        if [ $? -eq 0 ]; then
            echo "push 완료!"
        else
            echo "push 실패!"
            exit 1
        fi
    fi
else
    echo "커밋 취소됨"
    exit 1
fi
