require 'openssl'

# Fastlane 2.234.0 uses OpenSSL::PKey::EC.new which rejects PKCS#8 keys on
# OpenSSL 3.x ("invalid curve name"). Prepend a wrapper that falls back to
# OpenSSL::PKey.read, which handles both PKCS#8 and SEC1 formats.
module OpenSSLECNewFix
  def new(arg = nil, *rest)
    super
  rescue OpenSSL::PKey::ECError
    raise if arg.nil? || !arg.is_a?(String)
    OpenSSL::PKey.read(arg)
  end
end
OpenSSL::PKey::EC.singleton_class.prepend(OpenSSLECNewFix)

default_platform(:ios)

platform :ios do
  desc "Build and upload to TestFlight"
  lane :beta do
    setup_ci

    raw = ENV["ASC_KEY_CONTENT"]
    if raw.include?("BEGIN")
      key_content = raw.gsub('\n', "\n")
      is_base64 = false
    else
      key_content = raw
      is_base64 = true
    end

    app_store_connect_api_key(
      key_id: ENV["ASC_KEY_ID"],
      issuer_id: ENV["ASC_ISSUER_ID"],
      key_content: key_content,
      is_key_content_base64: is_base64
    )

    match(type: "appstore", readonly: true)

    increment_build_number(
      build_number: ENV["GITHUB_RUN_NUMBER"],
      xcodeproj: "ios/ProposalSystem.xcodeproj"
    )

    build_app(
      workspace: "ios/ProposalSystem.xcworkspace",
      scheme: "ProposalSystem",
      configuration: "Release",
      export_method: "app-store",
      output_directory: "build",
      output_name: "ProposalSystem.ipa"
    )

    upload_to_testflight(skip_waiting_for_build_processing: true)
  end
end
