#!/bin/bash

# iOS 앱 버전 관리 스크립트
# 사용법: ./ios-version-manager.sh

# 색상 정의
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 프로젝트 디렉토리로 이동
cd "$(dirname "$0")"

# 프로젝트 파일 경로
XCODEPROJ_FILE="ios/App/App.xcodeproj/project.pbxproj"

# 설정 파일 경로
CONFIG_FILE="$HOME/.zellyy_ios_build.conf"

# 버전 정보 관리 함수
manage_version_info() {
    # 현재 버전 및 빌드 번호 가져오기
    if [ -f "$XCODEPROJ_FILE" ]; then
        MARKETING_VERSION=$(grep -A 1 "MARKETING_VERSION" "$XCODEPROJ_FILE" | grep -o 'MARKETING_VERSION = [0-9]\+\.[0-9]\+\(\.[0-9]\+\)*' | sed 's/MARKETING_VERSION = //' | head -1)
        CURRENT_PROJECT_VERSION=$(grep -A 1 "CURRENT_PROJECT_VERSION" "$XCODEPROJ_FILE" | grep -o '[0-9]\+' | head -1)
        
        echo -e "${YELLOW}현재 버전 정보:${NC}"
        echo -e "마케팅 버전: ${GREEN}$MARKETING_VERSION${NC}"
        echo -e "빌드 번호: ${GREEN}$CURRENT_PROJECT_VERSION${NC}"
        
        # 설정 파일 확인 및 로드
        if [ -f "$CONFIG_FILE" ]; then
            source "$CONFIG_FILE"
        fi
        
        # 버전 수정 여부 확인
        echo -e "\n${YELLOW}버전 정보를 수정하시겠습니까? (y/n) [${LAST_VERSION_CHOICE:-n}]:${NC}"
        read -r UPDATE_VERSION
        UPDATE_VERSION=${UPDATE_VERSION:-${LAST_VERSION_CHOICE:-n}}
        
        if [[ "$UPDATE_VERSION" == "y" || "$UPDATE_VERSION" == "Y" ]]; then
            echo -e "\n${YELLOW}새 마케팅 버전을 입력하세요 (현재: $MARKETING_VERSION) [${LAST_MARKETING_VERSION:-$MARKETING_VERSION}]:${NC}"
            read -r NEW_MARKETING_VERSION
            NEW_MARKETING_VERSION=${NEW_MARKETING_VERSION:-${LAST_MARKETING_VERSION:-$MARKETING_VERSION}}
            
            if [ -z "$NEW_MARKETING_VERSION" ]; then
                NEW_MARKETING_VERSION=$MARKETING_VERSION
            fi
            
            echo -e "${YELLOW}새 빌드 번호를 입력하세요 (현재: $CURRENT_PROJECT_VERSION) [${LAST_BUILD_NUMBER:-$CURRENT_PROJECT_VERSION}]:${NC}"
            read -r NEW_PROJECT_VERSION
            NEW_PROJECT_VERSION=${NEW_PROJECT_VERSION:-${LAST_BUILD_NUMBER:-$CURRENT_PROJECT_VERSION}}
            
            if [ -z "$NEW_PROJECT_VERSION" ]; then
                NEW_PROJECT_VERSION=$CURRENT_PROJECT_VERSION
            fi
            
            # 버전 정보 업데이트
            # macOS에서는 sed -i에 백업 확장자를 지정해야 함
            sed -i '' "s/MARKETING_VERSION = [0-9][0-9]*\.[0-9][0-9]*\(\.[0-9][0-9]*\)*/MARKETING_VERSION = $NEW_MARKETING_VERSION/g" "$XCODEPROJ_FILE"
            sed -i '' "s/CURRENT_PROJECT_VERSION = $CURRENT_PROJECT_VERSION;/CURRENT_PROJECT_VERSION = $NEW_PROJECT_VERSION;/g" "$XCODEPROJ_FILE"
            
            echo -e "\n${GREEN}버전 정보가 업데이트되었습니다:${NC}"
            echo -e "마케팅 버전: ${GREEN}$NEW_MARKETING_VERSION${NC}"
            echo -e "빌드 번호: ${GREEN}$NEW_PROJECT_VERSION${NC}"
            
            # AppVersionInfo.tsx 파일의 하드코딩된 버전 정보 업데이트
            update_app_version_info "$NEW_MARKETING_VERSION" "$NEW_PROJECT_VERSION"
            
            # 설정 저장
            echo "LAST_VERSION_CHOICE=y" > "$CONFIG_FILE"
            echo "LAST_MARKETING_VERSION=$NEW_MARKETING_VERSION" >> "$CONFIG_FILE"
            echo "LAST_BUILD_NUMBER=$NEW_PROJECT_VERSION" >> "$CONFIG_FILE"
            
            # 성공 코드 반환
            return 0
        else
            echo -e "${YELLOW}현재 버전 정보를 유지합니다.${NC}"
            # 설정 저장
            echo "LAST_VERSION_CHOICE=n" > "$CONFIG_FILE"
            
            # 성공 코드 반환
            return 0
        fi
    else
        echo -e "${RED}프로젝트 파일을 찾을 수 없습니다: $XCODEPROJ_FILE${NC}"
        # 실패 코드 반환
        return 1
    fi
}

# AppVersionInfo.tsx 파일 업데이트 함수
update_app_version_info() {
    local version_name=$1
    local build_number=$2
    local app_version_file="src/components/AppVersionInfo.tsx"
    
    if [ ! -f "$app_version_file" ]; then
        echo -e "${RED}AppVersionInfo.tsx 파일을 찾을 수 없습니다.${NC}"
        return 1
    fi
    
    echo -e "${YELLOW}AppVersionInfo.tsx 파일의 버전 정보 업데이트 중...${NC}"
    
    # 백업 파일 생성
    cp "$app_version_file" "${app_version_file}.bak"
    
    # AppVersionInfo.tsx 파일에서 하드코딩된 버전 정보 업데이트
    # 인터페이스/타입 정의와 실제 값 할당 구분하여 패턴 수정
    sed -i '' "s/versionName: '[^']*'/versionName: '$version_name'/" "$app_version_file"
    
    # buildNumber 수정 - 객체 내에서만 수정
    sed -i '' "/hardcodedVersionInfo/,/}/s/buildNumber: [0-9]*/buildNumber: $build_number/" "$app_version_file"
    
    # versionCode 수정 - 객체 내에서만 수정 (iOS에서는 versionCode를 빌드 번호와 동일하게 설정)
    sed -i '' "/hardcodedVersionInfo/,/}/s/versionCode: [0-9]*/versionCode: $build_number/" "$app_version_file"
    
    echo -e "${GREEN}AppVersionInfo.tsx 파일의 버전 정보가 업데이트되었습니다.${NC}"
    return 0
}

# 스크립트가 직접 실행될 때만 버전 관리 함수 실행
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    manage_version_info
    exit $?
fi
