require "fastlane_core"
require "fastlane_core/helper"

module Fastlane
  module BuildType
    RELEASE = "release"
    DEBUG = "debug"
    ALL = [RELEASE, DEBUG]
  end

  module BuildFlavor
    PROD = "prod"
    STAFF = "staff"
    ALL = [PROD, STAFF]
  end

  module DistributionChannel
    FIREBASE = "firebase"
    PLAYSTORE = "playstore"
    ALL = [FIREBASE, PLAYSTORE]
  end

  module PlayStoreTrack
    INTERNAL = "internal"
    ALPHA = "alpha"
    BETA = "beta"
    PRODUCTION = "production"
    ALL = [INTERNAL, ALPHA, BETA, PRODUCTION]
    DEFAULT = INTERNAL
  end

  PLAYSTORE_ORG_ID = "5727007594506149943"

  module App
    GRADLE_FILE = File.expand_path("app/build.gradle.kts")

    def self.get_playstore_link(build_flavor:, track:)
      app_id = case build_flavor
      when BuildFlavor::PROD
        "4973755759369176058"
      when BuildFlavor::STAFF
        "4974946404871783373"
      else
        UI.user_error!("Unknown build flavor: #{build_flavor}")
      end

      track_name = case track
      when PlayStoreTrack::INTERNAL
        "internal-testing"
      when PlayStoreTrack::ALPHA
        "closed-testing"
      when PlayStoreTrack::BETA
        "open-testing"
      when PlayStoreTrack::PRODUCTION
        "production"
      else
        UI.user_error!("Unknown track: #{track}")
      end

      "https://play.google.com/console/u/0/developers/#{PLAYSTORE_ORG_ID}/app/#{app_id}/tracks/#{track_name}"
    end

    def self.get_google_services(build_flavor)
      unless build_flavor
        UI.user_error!("Build flavor is required!")
      end
      google_services_path = File.expand_path("app/src/#{build_flavor}/google-services.json")
      unless File.exist?(google_services_path)
        UI.user_error!("Google services file not found: #{google_services_path}")
      end
      JSON.parse(File.read(google_services_path))
    end

    def self.get_firebase_id(build_flavor)
      google_services = get_google_services(build_flavor)
      firebase_app_id = google_services["client"][0]["client_info"]["mobilesdk_app_id"]
      unless firebase_app_id
        UI.user_error!("Unable to get Firebase app ID for build flavor '#{build_flavor}'")
      end
      firebase_app_id
    end

    def self.get_package_name(build_flavor)
      google_services = get_google_services(build_flavor)
      package_name = google_services["client"][0]["client_info"]["android_client_info"]["package_name"]
      unless package_name
        UI.user_error!("Unable to get package name for build flavor '#{build_flavor}'")
      end
      package_name
    end

    def self.get_build_flavor(package_name)
      build_flavor = BuildFlavor::ALL.find do |flavor|
        get_package_name(flavor) == package_name
      end
      if build_flavor.nil?
        UI.user_error!("Unable to get build flavor for package name '#{package_name}'")
      end
      build_flavor
    end
  end
end
