#!/bin/bash

# iOS 앱 빌드 스크립트 (디버그 및 릴리즈 버전)
# 사용법: ./build-ios.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"

# 현재 버전 및 빌드 번호 가져오기
if [ -f "$XCODEPROJ_FILE" ]; then
    MARKETING_VERSION=$(grep -A 1 "MARKETING_VERSION" "$XCODEPROJ_FILE" | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+' | 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}"
    
    # 버전 수정 여부 확인
    echo -e "\n${YELLOW}버전 정보를 수정하시겠습니까? (y/n)${NC}"
    read -r UPDATE_VERSION
    
    if [[ "$UPDATE_VERSION" == "y" || "$UPDATE_VERSION" == "Y" ]]; then
        echo -e "\n${YELLOW}새 마케팅 버전을 입력하세요 (현재: $MARKETING_VERSION):${NC}"
        read -r NEW_MARKETING_VERSION
        
        if [ -z "$NEW_MARKETING_VERSION" ]; then
            NEW_MARKETING_VERSION=$MARKETING_VERSION
        fi
        
        echo -e "${YELLOW}새 빌드 번호를 입력하세요 (현재: $CURRENT_PROJECT_VERSION):${NC}"
        read -r NEW_PROJECT_VERSION
        
        if [ -z "$NEW_PROJECT_VERSION" ]; then
            NEW_PROJECT_VERSION=$CURRENT_PROJECT_VERSION
        fi
        
        # 버전 정보 업데이트
        # macOS에서는 sed -i에 백업 확장자를 지정해야 함
        sed -i '' "s/MARKETING_VERSION = $MARKETING_VERSION;/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}"
    else
        echo -e "${YELLOW}현재 버전 정보를 유지합니다.${NC}"
    fi
else
    echo -e "${RED}프로젝트 파일을 찾을 수 없습니다: $XCODEPROJ_FILE${NC}"
    exit 1
fi

# 빌드 타입 선택 메뉴
echo -e "\n${YELLOW}Zellyy Finance iOS 앱 빌드 스크립트${NC}"
echo -e "${YELLOW}=============================${NC}"
echo -e "빌드 타입을 선택하세요:"
echo -e "1) 디버그 빌드 (개발 및 테스트용)"
echo -e "2) 릴리즈 빌드 (App Store 배포용)"
echo -e "3) 종료"
echo -n "선택 (1-3): "
read -r CHOICE

case $CHOICE in
  1)
    BUILD_TYPE="debug"
    CONFIGURATION="Debug"
    ;;
  2)
    BUILD_TYPE="release"
    CONFIGURATION="Release"
    ;;
  3)
    echo -e "${YELLOW}빌드를 취소합니다.${NC}"
    exit 0
    ;;
  *)
    echo -e "${RED}잘못된 선택입니다. 빌드를 취소합니다.${NC}"
    exit 1
    ;;
esac

# 현재 버전 및 빌드 번호 가져오기
MARKETING_VERSION=$(grep -A 1 "MARKETING_VERSION" ios/App/App.xcodeproj/project.pbxproj | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+' | head -1)
CURRENT_PROJECT_VERSION=$(grep -A 1 "CURRENT_PROJECT_VERSION" ios/App/App.xcodeproj/project.pbxproj | grep -o '[0-9]\+' | head -1)

echo -e "${YELLOW}현재 마케팅 버전: ${MARKETING_VERSION}${NC}"
echo -e "${YELLOW}현재 빌드 번호: ${CURRENT_PROJECT_VERSION}${NC}"

# 빌드 넘버 입력 받기
echo -e "${YELLOW}새 빌드 번호를 입력하세요 (현재: ${CURRENT_PROJECT_VERSION}):${NC}"
read -r BUILD_NUMBER

# 빌드 넘버 유효성 검사
if ! [[ "$BUILD_NUMBER" =~ ^[0-9]+$ ]]; then
  echo -e "${RED}유효하지 않은 빌드 번호입니다. 숫자만 입력해주세요.${NC}"
  exit 1
fi

# 릴리즈 빌드인 경우 마케팅 버전 업데이트 여부 확인
if [[ "$BUILD_TYPE" == "release" ]]; then
  echo -e "${YELLOW}마케팅 버전을 업데이트하시겠습니까? 현재 버전: ${MARKETING_VERSION} (y/n)${NC}"
  read -r UPDATE_VERSION
  if [[ "$UPDATE_VERSION" == "y" || "$UPDATE_VERSION" == "Y" ]]; then
    echo -e "${YELLOW}새 마케팅 버전을 입력하세요 (형식: x.y.z):${NC}"
    read -r NEW_MARKETING_VERSION
    
    # 마케팅 버전 유효성 검사
    if ! [[ "$NEW_MARKETING_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
      echo -e "${RED}유효하지 않은 마케팅 버전입니다. x.y.z 형식으로 입력해주세요.${NC}"
      exit 1
    fi
    
    echo -e "${GREEN}마케팅 버전이 ${NEW_MARKETING_VERSION}(으)로 업데이트됩니다.${NC}"
    # 마케팅 버전 업데이트
    sed -i '' "s/MARKETING_VERSION = $MARKETING_VERSION;/MARKETING_VERSION = $NEW_MARKETING_VERSION;/g" ios/App/App.xcodeproj/project.pbxproj
    MARKETING_VERSION=$NEW_MARKETING_VERSION
  fi
fi

echo -e "${YELLOW}Zellyy Finance iOS 앱 빌드 시작 (${BUILD_TYPE}, 마케팅 버전: ${MARKETING_VERSION}, 빌드 번호: ${BUILD_NUMBER}): $(date)${NC}"

# 빌드 번호 업데이트
echo -e "${YELLOW}project.pbxproj 파일 업데이트 중...${NC}"
sed -i '' "s/CURRENT_PROJECT_VERSION = $CURRENT_PROJECT_VERSION;/CURRENT_PROJECT_VERSION = $BUILD_NUMBER;/g" ios/App/App.xcodeproj/project.pbxproj

if [ $? -ne 0 ]; then
  echo -e "${RED}project.pbxproj 업데이트 실패. 빌드 프로세스를 중단합니다.${NC}"
  exit 1
fi
echo -e "${GREEN}빌드 번호가 ${BUILD_NUMBER}(으)로 업데이트되었습니다.${NC}"

# 1. 웹 앱 빌드
echo -e "${YELLOW}1. 웹 앱 빌드 중...${NC}"
npm run build
if [ $? -ne 0 ]; then
  echo -e "${RED}웹 앱 빌드 실패. 빌드 프로세스를 중단합니다.${NC}"
  exit 1
fi
echo -e "${GREEN}웹 앱 빌드 완료${NC}"

# 2. Capacitor에 웹 코드 복사 및 동기화
echo -e "${YELLOW}2. Capacitor에 웹 코드 동기화 중...${NC}"
npx cap sync ios
if [ $? -ne 0 ]; then
  echo -e "${RED}Capacitor 동기화 실패. 빌드 프로세스를 중단합니다.${NC}"
  exit 1
fi
echo -e "${GREEN}Capacitor 동기화 완료${NC}"

# 3. iOS 앱 빌드
echo -e "${YELLOW}3. iOS 빌드 시작 (${BUILD_TYPE})...${NC}"

# 빌드 타입에 따라 다른 명령어 실행
cd ios/App
if [ "$BUILD_TYPE" = "debug" ]; then
  # 디버그 빌드
  echo -e "${YELLOW}빌드 대상을 선택하세요:${NC}"
  echo -e "1) 시뮬레이터용 빌드"
  echo -e "2) 실제 기기용 빌드"
  echo -n "선택 (1-2): "
  read -r TARGET_CHOICE
  
  case $TARGET_CHOICE in
    1)
      # 시뮬레이터용 빌드
      echo -e "${YELLOW}시뮬레이터용 빌드 시작...${NC}"
      xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug -sdk iphonesimulator -derivedDataPath build
      
      if [ $? -ne 0 ]; then
        echo -e "${RED}디버그 빌드 실패. 오류를 확인하세요.${NC}"
        exit 1
      fi
      
      echo -e "${GREEN}시뮬레이터용 빌드 성공!${NC}"
      echo -e "앱 파일 위치: $(pwd)/build/Build/Products/Debug-iphonesimulator/App.app"
      
      # 시뮬레이터 실행 여부 확인
      echo -e "${YELLOW}iOS 시뮬레이터에서 앱을 실행하시겠습니까? (y/n)${NC}"
      read -r RUN_SIMULATOR
      if [ "$RUN_SIMULATOR" = "y" ] || [ "$RUN_SIMULATOR" = "Y" ]; then
        # 사용 가능한 시뮬레이터 목록 표시
        echo -e "${YELLOW}사용 가능한 시뮬레이터:${NC}"
        xcrun simctl list devices available | grep -v "unavailable" | grep "^    "
        
        echo -e "${YELLOW}시뮬레이터 이름을 입력하세요 (예: iPhone 15):${NC}"
        read -r SIMULATOR_NAME
        
        # 시뮬레이터 UDID 가져오기
        SIMULATOR_UDID=$(xcrun simctl list devices available | grep "$SIMULATOR_NAME" | grep -o -E '[A-Za-z0-9\-]{36}' | head -1)
        
        if [ -z "$SIMULATOR_UDID" ]; then
          echo -e "${RED}시뮬레이터를 찾을 수 없습니다. 정확한 이름을 입력하세요.${NC}"
          exit 1
        fi
        
        # 시뮬레이터 실행
        echo -e "${YELLOW}시뮬레이터 실행 중...${NC}"
        open -a Simulator --args -CurrentDeviceUDID "$SIMULATOR_UDID"
        
        # 앱 설치 및 실행
        xcrun simctl install "$SIMULATOR_UDID" "$(pwd)/build/Build/Products/Debug-iphonesimulator/App.app"
        xcrun simctl launch "$SIMULATOR_UDID" "io.ionic.starter"
        
        echo -e "${GREEN}앱이 시뮬레이터에서 실행 중입니다.${NC}"
      fi
      ;;
      
    2)
      # 실제 기기용 빌드
      echo -e "${YELLOW}실제 기기용 빌드 시작...${NC}"
      
      # 개발자 계정 정보 입력
      echo -e "${YELLOW}Apple 개발자 계정 이메일을 입력하세요:${NC}"
      read -r APPLE_ID
      
      # 연결된 기기 확인
      echo -e "${YELLOW}연결된 iOS 기기 확인 중...${NC}"
      CONNECTED_DEVICES=$(xcrun xctrace list devices 2>/dev/null | grep -v "Simulator" | grep -v "===" | grep -v "^$" | grep -v "Devices" | sed 's/ (.*)//')
      
      if [ -z "$CONNECTED_DEVICES" ]; then
        echo -e "${RED}연결된 iOS 기기가 없습니다. 기기를 연결하고 다시 시도하세요.${NC}"
        exit 1
      fi
      
      echo -e "${YELLOW}연결된 기기:${NC}"
      echo "$CONNECTED_DEVICES"
      
      echo -e "${YELLOW}빌드 및 설치할 기기 이름을 정확히 입력하세요:${NC}"
      read -r DEVICE_NAME
      
      # 프로비저닝 프로파일 자동 관리 옵션으로 빌드
      echo -e "${YELLOW}디버그 빌드 및 기기 설치 중...${NC}"
      xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug -destination "name=$DEVICE_NAME" -allowProvisioningUpdates -derivedDataPath build
      
      if [ $? -ne 0 ]; then
        echo -e "${RED}디버그 빌드 실패. 오류를 확인하세요.${NC}"
        echo -e "${YELLOW}가능한 원인:${NC}"
        echo "1. 개발자 계정이 유효하지 않거나 로그인되지 않음"
        echo "2. 프로비저닝 프로파일이 없거나 유효하지 않음"
        echo "3. 기기가 개발자 계정에 등록되지 않음"
        echo "4. 기기 이름을 정확히 입력하지 않음"
        echo -e "${YELLOW}해결 방법:${NC}"
        echo "1. Xcode에서 수동으로 프로젝트를 열고 계정 설정 확인"
        echo "2. Xcode > Settings > Accounts에서 Apple ID 로그인 확인"
        echo "3. 기기를 개발자 계정에 등록 (Xcode > Window > Devices and Simulators)"
        exit 1
      fi
      
      echo -e "${GREEN}디버그 빌드 및 기기 설치 성공!${NC}"
      echo -e "${YELLOW}앱이 '$DEVICE_NAME' 기기에 설치되었습니다.${NC}"
      
      # IPA 파일 생성 (선택 사항)
      echo -e "${YELLOW}디버그용 IPA 파일을 생성하시겠습니까? (y/n)${NC}"
      read -r CREATE_IPA
      if [ "$CREATE_IPA" = "y" ] || [ "$CREATE_IPA" = "Y" ]; then
        echo -e "${YELLOW}디버그용 IPA 파일 생성 중...${NC}"
        
        # 임시 exportOptions.plist 생성
        cat > exportOptionsDebug.plist << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>development</string>
    <key>signingStyle</key>
    <string>automatic</string>
    <key>stripSwiftSymbols</key>
    <false/>
</dict>
</plist>
EOF
        
        # 아카이브 생성
        xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug clean archive -archivePath "build/App-Debug.xcarchive" -allowProvisioningUpdates
        
        if [ $? -ne 0 ]; then
          echo -e "${RED}아카이브 생성 실패. 오류를 확인하세요.${NC}"
          rm exportOptionsDebug.plist
          exit 1
        fi
        
        # IPA 파일 생성
        xcodebuild -exportArchive -archivePath "build/App-Debug.xcarchive" -exportOptionsPlist exportOptionsDebug.plist -exportPath "build/export-debug" -allowProvisioningUpdates
        
        if [ $? -ne 0 ]; then
          echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
          rm exportOptionsDebug.plist
          exit 1
        fi
        
        rm exportOptionsDebug.plist
        
        DEBUG_IPA_PATH="build/export-debug/App.ipa"
        DEBUG_DEST_PATH="$HOME/Dev/zellyy-finance-ios-debug.ipa"
        
        if [ -f "$DEBUG_IPA_PATH" ]; then
          echo -e "${GREEN}디버그용 IPA 파일 생성 성공!${NC}"
          echo -e "IPA 파일 위치: $(pwd)/$DEBUG_IPA_PATH"
          
          # Dev 디렉토리로 IPA 복사
          cp "$DEBUG_IPA_PATH" "$DEBUG_DEST_PATH"
          echo -e "${GREEN}IPA를 Dev 디렉토리에 복사했습니다: $DEBUG_DEST_PATH${NC}"
          
          echo -e "${YELLOW}다음 방법으로 다른 기기에 설치할 수 있습니다:${NC}"
          echo "1. Apple Configurator 2 앱 사용"
          echo "2. 기기 등록 및 프로비저닝 프로파일이 있는 경우 iTunes로 설치"
          echo "3. TestFlight를 통한 배포 (App Store Connect에 업로드 필요)"
        else
          echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
        fi
      fi
      ;;
      
    *)
      echo -e "${RED}잘못된 선택입니다. 빌드를 취소합니다.${NC}"
      exit 1
      ;;
  esac
  
elif [ "$BUILD_TYPE" = "release" ]; then
  # 릴리즈 빌드
  echo -e "${YELLOW}App Store 배포용 아카이브 생성 중...${NC}"
  
  # 개발자 계정 정보 입력
  echo -e "${YELLOW}Apple 개발자 계정 이메일을 입력하세요:${NC}"
  read -r APPLE_ID
  
  # 아카이브 생성
  xcodebuild -workspace App.xcworkspace -scheme App -configuration Release clean archive -archivePath "build/App.xcarchive" -allowProvisioningUpdates
  
  if [ $? -ne 0 ]; then
    echo -e "${RED}아카이브 생성 실패. 오류를 확인하세요.${NC}"
    exit 1
  fi
  
  echo -e "${GREEN}아카이브 생성 성공!${NC}"
  echo -e "아카이브 위치: $(pwd)/build/App.xcarchive"
  
  # IPA 파일 생성
  echo -e "${YELLOW}IPA 파일 생성 중...${NC}"
  xcodebuild -exportArchive -archivePath "build/App.xcarchive" -exportOptionsPlist exportOptions.plist -exportPath "build/export" -allowProvisioningUpdates
  
  if [ $? -ne 0 ]; then
    echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
    exit 1
  fi
  
  IPA_PATH="build/export/App.ipa"
  DEST_PATH="$HOME/Dev/zellyy-finance-ios.ipa"
  
  if [ -f "$IPA_PATH" ]; then
    echo -e "${GREEN}IPA 파일 생성 성공!${NC}"
    echo -e "IPA 파일 위치: $(pwd)/$IPA_PATH"
    
    # Dev 디렉토리로 IPA 복사
    cp "$IPA_PATH" "$DEST_PATH"
    echo -e "${GREEN}IPA를 Dev 디렉토리에 복사했습니다: $DEST_PATH${NC}"
    
    echo -e "${YELLOW}다음 단계:${NC}"
    echo "1. App Store Connect에 로그인: https://appstoreconnect.apple.com"
    echo "2. 앱 > 젤리의 적자탈출 > iOS 앱 > 빌드 섹션으로 이동"
    echo "3. Transporter 앱을 사용하여 IPA 파일 업로드: $DEST_PATH"
    echo "4. 검토 과정이 완료될 때까지 기다리기 (보통 몇 시간에서 24시간 소요)"
  else
    echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
    exit 1
  fi
  
else
  echo -e "${RED}지원되지 않는 빌드 타입입니다: $BUILD_TYPE${NC}"
  echo -e "${YELLOW}사용법: ./build-ios.sh${NC}"
  exit 1
fi

echo -e "${GREEN}빌드 프로세스 완료: $(date)${NC}"
