#!/bin/bash

# 색상 정의
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
MAGENTA='\033[0;35m'
NC='\033[0m' # No Color
BOLD='\033[1m'
DIM='\033[2m'

# 설정 설명 함수
get_description() {
    local key="$1"
    local value="$2"

    case "$key" in
        # Core 설정
        "core.ignorecase")
            if [ "$value" = "true" ]; then
                echo "대소문자 무시 (macOS/Windows 기본)"
            else
                echo "대소문자 구분 (Linux 기본)"
            fi
            ;;
        "core.precomposeunicode")
            if [ "$value" = "true" ]; then
                echo "유니코드 정규화 사용 (macOS 한글 파일명 호환)"
            else
                echo "유니코드 정규화 미사용"
            fi
            ;;
        "core.autocrlf")
            case "$value" in
                "true") echo "체크아웃시 LF→CRLF, 커밋시 CRLF→LF (Windows 권장)" ;;
                "input") echo "커밋시만 CRLF→LF 변환 (macOS/Linux 권장)" ;;
                "false") echo "줄바꿈 변환 안함" ;;
                *) echo "줄바꿈 자동 변환 설정" ;;
            esac
            ;;
        "core.safecrlf")
            case "$value" in
                "true") echo "CRLF 변환시 데이터 손실 방지 (에러 발생)" ;;
                "warn") echo "CRLF 변환시 경고만 표시" ;;
                "false") echo "CRLF 변환 검사 안함" ;;
                *) echo "CRLF 안전 검사 설정" ;;
            esac
            ;;
        "core.filemode")
            if [ "$value" = "true" ]; then
                echo "파일 권한(chmod) 변경 추적"
            else
                echo "파일 권한 변경 무시 (Windows 권장)"
            fi
            ;;
        "core.editor")
            echo "Git 기본 편집기: $value"
            ;;
        "core.pager")
            echo "Git 페이저: $value"
            ;;
        "core.excludesfile")
            echo "전역 .gitignore 파일 경로"
            ;;
        "core.whitespace")
            echo "공백 문자 처리 규칙"
            ;;
        "core.quotepath")
            if [ "$value" = "false" ]; then
                echo "비ASCII 파일명(한글 등) 그대로 표시"
            else
                echo "비ASCII 파일명 이스케이프 처리"
            fi
            ;;
        "core.symlinks")
            if [ "$value" = "true" ]; then
                echo "심볼릭 링크 지원"
            else
                echo "심볼릭 링크를 일반 파일로 처리"
            fi
            ;;
        "core.longpaths")
            if [ "$value" = "true" ]; then
                echo "260자 초과 긴 경로 지원 (Windows)"
            else
                echo "기본 경로 길이 제한 사용"
            fi
            ;;
        "core.compression")
            echo "압축 레벨: $value (-1:기본, 0:없음, 1-9:레벨)"
            ;;
        "core.packedgitlimit")
            echo "팩 파일 메모리 제한: $value"
            ;;
        "core.packedgitwindowsize")
            echo "팩 파일 윈도우 크기: $value"
            ;;

        # User 설정
        "user.name")
            echo "커밋 작성자 이름"
            ;;
        "user.email")
            echo "커밋 작성자 이메일"
            ;;
        "user.signingkey")
            echo "GPG 서명 키"
            ;;

        # Color 설정
        "color.ui")
            if [ "$value" = "auto" ] || [ "$value" = "true" ]; then
                echo "터미널 컬러 출력 활성화"
            else
                echo "터미널 컬러 출력 비활성화"
            fi
            ;;
        "color.branch")
            echo "branch 명령 컬러 출력: $value"
            ;;
        "color.diff")
            echo "diff 명령 컬러 출력: $value"
            ;;
        "color.status")
            echo "status 명령 컬러 출력: $value"
            ;;

        # Push 설정
        "push.default")
            case "$value" in
                "simple") echo "현재 브랜치를 동일 이름의 원격 브랜치로 푸시 (Git 2.0+ 기본)" ;;
                "current") echo "현재 브랜치를 동일 이름으로 푸시" ;;
                "upstream"|"tracking") echo "현재 브랜치를 추적 브랜치로 푸시" ;;
                "matching") echo "로컬/원격 이름이 같은 모든 브랜치 푸시 (구버전 기본)" ;;
                "nothing") echo "명시적 지정 필요" ;;
                *) echo "푸시 기본 동작 설정" ;;
            esac
            ;;
        "push.autoSetupRemote")
            if [ "$value" = "true" ]; then
                echo "푸시시 자동으로 원격 추적 브랜치 설정"
            else
                echo "원격 추적 브랜치 수동 설정 필요"
            fi
            ;;
        "push.followTags")
            if [ "$value" = "true" ]; then
                echo "푸시시 관련 태그도 함께 푸시"
            else
                echo "태그는 별도로 푸시 필요"
            fi
            ;;

        # Pull 설정
        "pull.rebase")
            case "$value" in
                "true") echo "pull시 merge 대신 rebase 사용" ;;
                "false") echo "pull시 기본 merge 사용" ;;
                "interactive") echo "pull시 대화형 rebase 사용" ;;
                "merges"|"preserve") echo "pull시 merge 커밋 보존하며 rebase" ;;
                *) echo "pull 동작 설정" ;;
            esac
            ;;
        "pull.ff")
            case "$value" in
                "only") echo "fast-forward만 허용 (충돌시 실패)" ;;
                "true") echo "가능하면 fast-forward 사용" ;;
                "false") echo "항상 merge 커밋 생성" ;;
                *) echo "fast-forward 설정" ;;
            esac
            ;;

        # Fetch 설정
        "fetch.prune")
            if [ "$value" = "true" ]; then
                echo "fetch시 삭제된 원격 브랜치 자동 정리"
            else
                echo "삭제된 원격 브랜치 수동 정리 필요"
            fi
            ;;
        "fetch.pruneTags")
            if [ "$value" = "true" ]; then
                echo "fetch시 삭제된 원격 태그 자동 정리"
            else
                echo "삭제된 원격 태그 수동 정리 필요"
            fi
            ;;

        # Merge 설정
        "merge.conflictstyle")
            case "$value" in
                "merge") echo "기본 충돌 스타일 (<<<< ==== >>>>)" ;;
                "diff3") echo "3-way 충돌 스타일 (원본 포함)" ;;
                "zdiff3") echo "향상된 3-way 스타일 (Git 2.35+)" ;;
                *) echo "충돌 표시 스타일" ;;
            esac
            ;;
        "merge.tool")
            echo "머지 도구: $value"
            ;;
        "merge.ff")
            case "$value" in
                "true") echo "가능하면 fast-forward merge" ;;
                "false") echo "항상 merge 커밋 생성" ;;
                "only") echo "fast-forward만 허용" ;;
                *) echo "fast-forward 설정" ;;
            esac
            ;;

        # Diff 설정
        "diff.tool")
            echo "diff 도구: $value"
            ;;
        "diff.algorithm")
            case "$value" in
                "default"|"myers") echo "기본 diff 알고리즘" ;;
                "minimal") echo "최소 변경 diff 알고리즘" ;;
                "patience") echo "patience diff (더 읽기 좋음)" ;;
                "histogram") echo "histogram diff (patience 개선)" ;;
                *) echo "diff 알고리즘" ;;
            esac
            ;;
        "diff.colorMoved")
            case "$value" in
                "default"|"zebra") echo "이동된 코드 블록 다른 색상 표시" ;;
                "plain") echo "이동된 라인 단순 표시" ;;
                "blocks") echo "이동된 블록 표시" ;;
                "dimmed-zebra") echo "이동된 블록 흐리게 표시" ;;
                "no"|"false") echo "이동된 코드 표시 안함" ;;
                *) echo "이동된 코드 표시 설정" ;;
            esac
            ;;
        "diff.renames")
            if [ "$value" = "true" ] || [ "$value" = "copies" ]; then
                echo "파일 이름 변경/복사 감지"
            else
                echo "파일 이름 변경 감지 안함"
            fi
            ;;

        # Rebase 설정
        "rebase.autoStash")
            if [ "$value" = "true" ]; then
                echo "rebase 전 자동 stash, 후 자동 복원"
            else
                echo "rebase 전 수동 stash 필요"
            fi
            ;;
        "rebase.autoSquash")
            if [ "$value" = "true" ]; then
                echo "fixup!/squash! 커밋 자동 처리"
            else
                echo "fixup!/squash! 커밋 수동 처리"
            fi
            ;;
        "rebase.updateRefs")
            if [ "$value" = "true" ]; then
                echo "rebase시 관련 브랜치 포인터 자동 업데이트"
            else
                echo "rebase시 현재 브랜치만 업데이트"
            fi
            ;;

        # Branch 설정
        "branch.autoSetupMerge")
            case "$value" in
                "always") echo "새 브랜치 생성시 항상 추적 설정" ;;
                "true") echo "원격 브랜치 기반 생성시 추적 설정" ;;
                "false") echo "자동 추적 설정 안함" ;;
                "inherit") echo "부모 브랜치 추적 설정 상속" ;;
                *) echo "브랜치 추적 자동 설정" ;;
            esac
            ;;
        "branch.autoSetupRebase")
            case "$value" in
                "always") echo "모든 추적 브랜치에서 pull시 rebase" ;;
                "local") echo "로컬 브랜치에서 pull시 rebase" ;;
                "remote") echo "원격 브랜치에서 pull시 rebase" ;;
                "never") echo "자동 rebase 설정 안함" ;;
                *) echo "자동 rebase 설정" ;;
            esac
            ;;
        "branch.sort")
            echo "브랜치 정렬 기준: $value"
            ;;

        # Init 설정
        "init.defaultBranch")
            echo "새 저장소 기본 브랜치 이름: $value"
            ;;

        # Credential 설정
        "credential.helper")
            case "$value" in
                "cache") echo "메모리에 임시 저장 (15분 기본)" ;;
                "store") echo "파일에 평문 저장 (보안 주의)" ;;
                "osxkeychain") echo "macOS 키체인에 저장" ;;
                "manager"|"manager-core") echo "Git Credential Manager 사용" ;;
                "wincred") echo "Windows 자격증명 관리자 사용" ;;
                *) echo "자격증명 저장 방식" ;;
            esac
            ;;

        # Commit 설정
        "commit.gpgsign")
            if [ "$value" = "true" ]; then
                echo "모든 커밋에 GPG 서명"
            else
                echo "GPG 서명 선택적 사용"
            fi
            ;;
        "commit.template")
            echo "커밋 메시지 템플릿 파일: $value"
            ;;
        "commit.verbose")
            if [ "$value" = "true" ]; then
                echo "커밋시 diff 내용 표시"
            else
                echo "커밋시 diff 표시 안함"
            fi
            ;;

        # Tag 설정
        "tag.gpgsign")
            if [ "$value" = "true" ]; then
                echo "모든 태그에 GPG 서명"
            else
                echo "GPG 서명 선택적 사용"
            fi
            ;;
        "tag.sort")
            echo "태그 정렬 기준: $value"
            ;;

        # Log 설정
        "log.date")
            case "$value" in
                "relative") echo "상대적 시간 표시 (예: 2 hours ago)" ;;
                "local") echo "로컬 시간대로 표시" ;;
                "iso"|"iso8601") echo "ISO 8601 형식" ;;
                "short") echo "YYYY-MM-DD 형식" ;;
                "format:"*) echo "커스텀 날짜 형식" ;;
                *) echo "로그 날짜 형식" ;;
            esac
            ;;
        "log.showSignature")
            if [ "$value" = "true" ]; then
                echo "로그에 GPG 서명 정보 표시"
            else
                echo "로그에 서명 정보 숨김"
            fi
            ;;

        # Status 설정
        "status.showUntrackedFiles")
            case "$value" in
                "no") echo "추적되지 않는 파일 표시 안함" ;;
                "normal") echo "추적되지 않는 파일 표시 (기본)" ;;
                "all") echo "모든 개별 파일 표시" ;;
                *) echo "추적되지 않는 파일 표시 설정" ;;
            esac
            ;;
        "status.submoduleSummary")
            if [ "$value" = "true" ]; then
                echo "서브모듈 변경 요약 표시"
            else
                echo "서브모듈 변경 요약 숨김"
            fi
            ;;

        # Stash 설정
        "stash.showPatch")
            if [ "$value" = "true" ]; then
                echo "stash list에 패치 내용 표시"
            else
                echo "stash list 간단히 표시"
            fi
            ;;

        # Rerere 설정
        "rerere.enabled")
            if [ "$value" = "true" ]; then
                echo "충돌 해결 방법 기억 및 재사용"
            else
                echo "충돌 해결 기록 안함"
            fi
            ;;
        "rerere.autoUpdate")
            if [ "$value" = "true" ]; then
                echo "rerere 적용 후 자동 스테이징"
            else
                echo "rerere 적용 후 수동 스테이징"
            fi
            ;;

        # Help 설정
        "help.autocorrect")
            if [ "$value" = "0" ] || [ -z "$value" ]; then
                echo "명령어 자동 수정 안함"
            elif [ "$value" = "immediate" ]; then
                echo "오타시 즉시 자동 수정 실행"
            elif [ "$value" = "prompt" ]; then
                echo "오타시 수정 확인 후 실행"
            else
                echo "오타시 ${value}0ms 후 자동 수정 실행"
            fi
            ;;

        # Alias 설정
        alias.*)
            echo "단축 명령어"
            ;;

        # Remote 설정
        remote.*.url)
            echo "원격 저장소 URL"
            ;;
        remote.*.fetch)
            echo "fetch 참조 스펙"
            ;;
        remote.*.pushurl)
            echo "push 전용 URL (다른 URL로 push)"
            ;;

        # Branch specific 설정
        branch.*.remote)
            echo "이 브랜치의 원격 저장소"
            ;;
        branch.*.merge)
            echo "이 브랜치가 추적하는 원격 브랜치"
            ;;
        branch.*.rebase)
            if [ "$value" = "true" ]; then
                echo "이 브랜치 pull시 rebase 사용"
            else
                echo "이 브랜치 pull시 merge 사용"
            fi
            ;;

        # HTTP 설정
        "http.sslVerify")
            if [ "$value" = "true" ]; then
                echo "SSL 인증서 검증 (보안)"
            else
                echo "SSL 인증서 검증 안함 (보안 위험!)"
            fi
            ;;
        "http.proxy")
            echo "HTTP 프록시: $value"
            ;;
        "http.postBuffer")
            echo "HTTP POST 버퍼 크기 (대용량 push시 조정)"
            ;;

        # GPG 설정
        "gpg.format")
            case "$value" in
                "openpgp") echo "OpenPGP 형식 서명" ;;
                "x509") echo "X.509 형식 서명" ;;
                "ssh") echo "SSH 키로 서명" ;;
                *) echo "서명 형식" ;;
            esac
            ;;
        "gpg.ssh.allowedSignersFile")
            echo "SSH 서명 허용 키 파일"
            ;;

        # Submodule 설정
        "submodule.recurse")
            if [ "$value" = "true" ]; then
                echo "서브모듈에도 명령 재귀 적용"
            else
                echo "서브모듈 별도 처리"
            fi
            ;;

        # 기본 처리
        *)
            echo ""
            ;;
    esac
}

# origin을 짧은 형태로 변환
format_origin() {
    local origin="$1"
    case "$origin" in
        "file:"*"/.gitconfig")
            echo -e "${BLUE}[global]${NC}"
            ;;
        "file:"*".git/config")
            echo -e "${GREEN}[local]${NC}"
            ;;
        "file:/etc/gitconfig"|"file:"*"/etc/gitconfig")
            echo -e "${RED}[system]${NC}"
            ;;
        "file:"*".config/git/config")
            echo -e "${BLUE}[global]${NC}"
            ;;
        "file:"*"Xcode"*"gitconfig")
            echo -e "${MAGENTA}[xcode]${NC}"
            ;;
        "file:"*"git-core/gitconfig")
            echo -e "${MAGENTA}[system]${NC}"
            ;;
        "command line:")
            echo -e "${CYAN}[cmdline]${NC}"
            ;;
        "blob:"*)
            echo -e "${CYAN}[blob]${NC}"
            ;;
        *)
            # 파일 경로만 추출해서 짧게 표시
            local short_path="${origin#file:}"
            short_path="${short_path##*/}"  # 파일명만
            echo -e "${DIM}[$short_path]${NC}"
            ;;
    esac
}

# 현재 설정 표시
show_current_config() {
    echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════════════════════════${NC}"
    echo -e "${BOLD}${CYAN}                       현재 Git 설정 (git config --list --show-origin)${NC}"
    echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════════════════════════${NC}"
    echo ""
    echo -e "  ${BLUE}[global]${NC}${DIM} ~/.gitconfig${NC}  ${GREEN}[local]${NC}${DIM} .git/config${NC}  ${RED}[system]${NC}${DIM} /etc/gitconfig${NC}  ${MAGENTA}[xcode]${NC}${DIM} Xcode 번들${NC}"
    echo ""

    local current_section=""

    # --show-origin 출력: "file:/path/to/config\tkey=value"
    git config --list --show-origin | sort -t$'\t' -k2 | while IFS=$'\t' read -r origin keyvalue; do
        # key=value 분리
        local key="${keyvalue%%=*}"
        local value="${keyvalue#*=}"

        # 섹션 구분
        local section="${key%%.*}"
        if [ "$section" != "$current_section" ]; then
            current_section="$section"
            echo ""
            echo -e "${BOLD}${YELLOW}[$section]${NC}"
        fi

        local desc=$(get_description "$key" "$value")
        local origin_tag=$(format_origin "$origin")

        if [ -n "$desc" ]; then
            printf "  %-18b ${GREEN}%-40s${NC} = ${BOLD}%-20s${NC} ${DIM}# %s${NC}\n" "$origin_tag" "$key" "$value" "$desc"
        else
            printf "  %-18b ${GREEN}%-40s${NC} = ${BOLD}%s${NC}\n" "$origin_tag" "$key" "$value"
        fi
    done
}

# 설정 상태 확인 및 출력 함수
# 사용법: show_config_option "key" "recommended_value" "description" "options"
show_config_option() {
    local key="$1"
    local recommended="$2"
    local desc="$3"
    local options="$4"

    local current=$(git config --get "$key" 2>/dev/null)
    local status_icon
    local cmd_color
    local value_display

    if [ -n "$current" ]; then
        # 설정됨
        status_icon="${GREEN}✓${NC}"
        cmd_color="${DIM}"
        value_display="${GREEN}현재: $current${NC}"
    else
        # 미설정
        status_icon="${YELLOW}○${NC}"
        cmd_color="${CYAN}"
        value_display="${YELLOW}미설정${NC}"
    fi

    echo -e "  ${status_icon} ${cmd_color}git config --global $key \"$recommended\"${NC}"
    echo -e "      ${value_display}  ${DIM}# $desc${NC}"
    if [ -n "$options" ]; then
        echo -e "      ${DIM}옵션: $options${NC}"
    fi
}

# 추천 설정 표시
show_recommended_settings() {
    echo ""
    echo -e "${BOLD}${MAGENTA}════════════════════════════════════════════════════════════════════════════════${NC}"
    echo -e "${BOLD}${MAGENTA}                              추천 Git 설정 옵션${NC}"
    echo -e "${BOLD}${MAGENTA}════════════════════════════════════════════════════════════════════════════════${NC}"
    echo ""
    echo -e "  ${GREEN}✓${NC} 설정됨    ${YELLOW}○${NC} 미설정 (적용 권장)"
    echo ""

    echo -e "${BOLD}${YELLOW}[기본 설정 - 필수]${NC}"
    show_config_option "user.name" "Your Name" "커밋에 표시될 이름" ""
    show_config_option "user.email" "your@email.com" "커밋에 표시될 이메일" ""

    echo ""
    echo -e "${BOLD}${YELLOW}[에디터 설정]${NC}"
    show_config_option "core.editor" "vim" "Git 기본 편집기" "vim | nano | code --wait | subl -n -w"

    echo ""
    echo -e "${BOLD}${YELLOW}[줄바꿈 처리 - OS별 권장]${NC}"
    show_config_option "core.autocrlf" "input" "줄바꿈 자동 변환" "input (macOS/Linux) | true (Windows) | false"

    echo ""
    echo -e "${BOLD}${YELLOW}[한글 파일명 처리]${NC}"
    show_config_option "core.quotepath" "false" "비ASCII 파일명 표시" "false: 한글 그대로 | true: 이스케이프"
    show_config_option "core.precomposeunicode" "true" "macOS 한글 파일명 호환" "true: NFD→NFC 정규화"

    echo ""
    echo -e "${BOLD}${YELLOW}[기본 브랜치 이름]${NC}"
    show_config_option "init.defaultBranch" "main" "새 저장소 기본 브랜치" "main | master | trunk"

    echo ""
    echo -e "${BOLD}${YELLOW}[Push 설정]${NC}"
    show_config_option "push.default" "current" "푸시 기본 동작" "current | simple (기본) | upstream | matching"
    show_config_option "push.autoSetupRemote" "true" "자동 원격 추적 설정" "true | false"
    show_config_option "push.followTags" "true" "푸시시 관련 태그도 함께" "true | false"

    echo ""
    echo -e "${BOLD}${YELLOW}[Pull 설정]${NC}"
    show_config_option "pull.rebase" "true" "pull시 rebase 사용" "true: rebase | false: merge (기본)"
    show_config_option "pull.ff" "only" "fast-forward 설정" "only | true (기본) | false"

    echo ""
    echo -e "${BOLD}${YELLOW}[Fetch 설정]${NC}"
    show_config_option "fetch.prune" "true" "삭제된 원격 브랜치 정리" "true | false"
    show_config_option "fetch.pruneTags" "true" "삭제된 원격 태그 정리" "true | false"

    echo ""
    echo -e "${BOLD}${YELLOW}[Rebase 설정]${NC}"
    show_config_option "rebase.autoStash" "true" "rebase 전후 자동 stash" "true | false"
    show_config_option "rebase.autoSquash" "true" "fixup!/squash! 자동 처리" "true | false"
    show_config_option "rebase.updateRefs" "true" "관련 브랜치 자동 업데이트" "true | false"

    echo ""
    echo -e "${BOLD}${YELLOW}[Merge 설정]${NC}"
    show_config_option "merge.conflictstyle" "zdiff3" "충돌 표시 스타일" "zdiff3 (Git 2.35+) | diff3 | merge (기본)"
    show_config_option "merge.ff" "false" "항상 merge 커밋 생성" "false | true (기본) | only"

    echo ""
    echo -e "${BOLD}${YELLOW}[Diff 설정]${NC}"
    show_config_option "diff.algorithm" "histogram" "diff 알고리즘" "histogram | patience | minimal | default"
    show_config_option "diff.colorMoved" "default" "이동된 코드 블록 표시" "default | zebra | plain | dimmed-zebra | no"
    show_config_option "diff.renames" "true" "파일 이름 변경 감지" "true | copies | false"

    echo ""
    echo -e "${BOLD}${YELLOW}[충돌 해결 기억 (rerere)]${NC}"
    show_config_option "rerere.enabled" "true" "충돌 해결 방법 기억" "true | false"
    show_config_option "rerere.autoUpdate" "true" "rerere 적용 후 자동 스테이징" "true | false"

    echo ""
    echo -e "${BOLD}${YELLOW}[명령어 자동 수정]${NC}"
    show_config_option "help.autocorrect" "prompt" "오타 자동 수정" "prompt | immediate | 10 (1초후) | 0 (끔)"

    echo ""
    echo -e "${BOLD}${YELLOW}[자격증명 저장]${NC}"
    show_config_option "credential.helper" "osxkeychain" "자격증명 저장 방식" "osxkeychain (macOS) | manager (Win) | cache | store"

    echo ""
    echo -e "${BOLD}${YELLOW}[커밋 설정]${NC}"
    show_config_option "commit.verbose" "true" "커밋시 diff 표시" "true | false"

    echo ""
    echo -e "${BOLD}${YELLOW}[Status 설정]${NC}"
    show_config_option "status.showUntrackedFiles" "all" "추적 안된 파일 표시" "all | normal (기본) | no"

    echo ""
    echo -e "${BOLD}${YELLOW}[유용한 alias]${NC}"
    show_config_option "alias.st" "status -sb" "git st → 간단한 상태" ""
    show_config_option "alias.co" "checkout" "git co → checkout 단축" ""
    show_config_option "alias.br" "branch -vv" "git br → 브랜치 상세" ""
    show_config_option "alias.lg" "log --oneline --graph --decorate -20" "git lg → 그래프 로그" ""
    show_config_option "alias.unstage" "reset HEAD --" "git unstage → 스테이지 취소" ""
    show_config_option "alias.last" "log -1 HEAD --stat" "git last → 마지막 커밋" ""
    show_config_option "alias.amend" "commit --amend --no-edit" "git amend → 커밋 수정" ""
    show_config_option "alias.undo" "reset --soft HEAD~1" "git undo → 마지막 커밋 취소" ""

    echo ""
    echo -e "${BOLD}${YELLOW}[GPG/SSH 서명]${NC}"
    show_config_option "commit.gpgsign" "true" "모든 커밋에 서명" "true | false"
    show_config_option "gpg.format" "ssh" "서명 형식" "ssh | openpgp | x509"
    show_config_option "user.signingkey" "~/.ssh/id_ed25519.pub" "서명 키" ""

    echo ""
    echo -e "${BOLD}${YELLOW}[대용량 파일/저장소]${NC}"
    show_config_option "http.postBuffer" "524288000" "HTTP POST 버퍼 (500MB)" ""
    show_config_option "core.compression" "9" "압축 레벨" "0-9 (-1: 기본)"
}

# 특정 설정 변경
apply_setting() {
    local scope="$1"  # --global, --local, --system
    local key="$2"
    local value="$3"

    if [ -z "$key" ]; then
        echo -e "${RED}설정 키를 입력해주세요${NC}"
        return 1
    fi

    if [ -z "$value" ]; then
        echo -e "${YELLOW}현재 값:${NC} $(git config $scope --get "$key" 2>/dev/null || echo "(설정 안됨)")"
        return 0
    fi

    git config $scope "$key" "$value"
    echo -e "${GREEN}설정 완료:${NC} $key = $value"
}

# 도움말
show_help() {
    echo -e "${BOLD}사용법:${NC}"
    echo "  ptyGitConfig              현재 설정 및 추천 옵션 표시"
    echo "  ptyGitConfig list         현재 설정만 표시"
    echo "  ptyGitConfig recommend    추천 설정만 표시"
    echo "  ptyGitConfig get <key>    특정 설정 값 확인"
    echo "  ptyGitConfig set <key> <value>        로컬 설정"
    echo "  ptyGitConfig set-global <key> <value> 전역 설정"
    echo ""
    echo -e "${BOLD}예시:${NC}"
    echo "  ptyGitConfig get user.name"
    echo "  ptyGitConfig set-global user.name \"John Doe\""
    echo "  ptyGitConfig set-global core.autocrlf input"
}

# 메인 로직
case "$1" in
    "list"|"-l")
        show_current_config
        ;;
    "recommend"|"rec"|"-r")
        show_recommended_settings
        ;;
    "get"|"-g")
        value=$(git config --get "$2" 2>/dev/null)
        if [ -n "$value" ]; then
            desc=$(get_description "$2" "$value")
            echo -e "${GREEN}$2${NC} = ${BOLD}$value${NC}"
            if [ -n "$desc" ]; then
                echo -e "${DIM}# $desc${NC}"
            fi
        else
            echo -e "${YELLOW}설정되지 않음: $2${NC}"
        fi
        ;;
    "set"|"-s")
        apply_setting "--local" "$2" "$3"
        ;;
    "set-global"|"-sg")
        apply_setting "--global" "$2" "$3"
        ;;
    "help"|"-h"|"--help")
        show_help
        ;;
    "")
        show_current_config
        echo ""
        show_recommended_settings
        ;;
    *)
        echo -e "${RED}알 수 없는 명령: $1${NC}"
        show_help
        exit 1
        ;;
esac

echo ""
