/**
 * 플랫폼 관련 유틸리티 함수들
 */

import { Capacitor } from '@capacitor/core';

/**
 * 안드로이드 플랫폼인지 확인
 */
export const isAndroidPlatform = (): boolean => {
  return Capacitor.getPlatform() === 'android';
};

/**
 * iOS 플랫폼인지 확인
 */
export const isIOSPlatform = (): boolean => {
  return Capacitor.getPlatform() === 'ios';
};

/**
 * 네이티브 플랫폼(Android 또는 iOS)인지 확인
 */
export const isNativePlatform = (): boolean => {
  return isAndroidPlatform() || isIOSPlatform();
};

/**
 * 앱 버전 정보 가져오기
 */
export const getAppVersionInfo = async () => {
  // 기본값 설정 - 플러그인 실패 시 사용
  const defaultVersionInfo = {
    versionName: '1.0.0',
    versionCode: 1,
    buildNumber: 1,
    platform: Capacitor.getPlatform(),
    defaultValues: true
  };

  try {
    // 디버깅을 위한 플랫폼 체크 로그
    console.log('현재 플랫폼:', Capacitor.getPlatform());
    console.log('플러그인 가용성 확인:', Capacitor.isPluginAvailable('BuildInfo'));

    // BuildInfoPlugin이 설치되어 있다면 사용
    if (Capacitor.isPluginAvailable('BuildInfo')) {
      try {
        // 플러그인 호출 시도
        // @ts-expect-error - 플러그인이 런타임에 등록되므로 타입 체크를 무시
        const buildInfo = await Capacitor.Plugins.BuildInfo.getBuildInfo();
        
        console.log('네이티브에서 받은 빌드 정보(raw):', JSON.stringify(buildInfo));
        
        // 수신한 데이터가 null 또는 undefined인 경우 체크
        if (!buildInfo) {
          console.warn('네이티브 빌드 정보가 없음');
          throw new Error('빌드 정보를 받지 못했습니다');
        }
        
        // 받은 정보가 유효한지 확인 및 타입 변환
        if (typeof buildInfo === 'object') {
          // 타입 변환 및 기본값 설정 - 명시적으로 문자열/숫자 타입 변환
          const result = {
            versionName: typeof buildInfo.versionName === 'string' ? buildInfo.versionName : 
                         (buildInfo.versionName ? String(buildInfo.versionName) : defaultVersionInfo.versionName),
            versionCode: typeof buildInfo.versionCode === 'number' ? buildInfo.versionCode : 
                         (buildInfo.versionCode ? Number(buildInfo.versionCode) : defaultVersionInfo.versionCode),
            buildNumber: typeof buildInfo.buildNumber === 'number' ? buildInfo.buildNumber : 
                         (buildInfo.buildNumber ? Number(buildInfo.buildNumber) : defaultVersionInfo.buildNumber),
            platform: typeof buildInfo.platform === 'string' ? buildInfo.platform : 
                      (buildInfo.platform ? String(buildInfo.platform) : defaultVersionInfo.platform),
            timestamp: buildInfo.timestamp || Date.now(),
            pluginResponse: JSON.stringify(buildInfo)
          };
          
          // 값이 기본값인지 확인 (BuildConfig에서 기본값을 반환하는 경우)
          if (result.versionName === '1.0' && result.versionCode === 1 && isAndroidPlatform()) {
            console.warn('플러그인이 기본값을 반환함, 빌드 설정을 확인해야 함');
          }
          
          console.log('변환된 빌드 정보:', result);
          return result;
        }
        throw new Error('유효하지 않은 빌드 정보 응답');
      } catch (pluginError) {
        console.error('BuildInfo 플러그인 호출 오류:', pluginError);
        // 오류 발생시 기본값 사용
        return {
          ...defaultVersionInfo,
          error: true,
          errorMessage: String(pluginError)
        };
      }
    } else {
      console.warn('BuildInfo 플러그인을 사용할 수 없음');
      // 플러그인이 없는 경우 기본값 반환
      return defaultVersionInfo;
    }
  } catch (error) {
    console.error('앱 버전 정보 가져오기 오류:', error);
    // 오류 발생 시에도 앱 실행은 계속되도록 기본값 반환
    return {
      ...defaultVersionInfo,
      error: true,
      errorMessage: String(error)
    };
  }
};
