fastlane_require 'dotenv'

ENV_LC_ALL = 'LC_ALL'
ENV_LANG = 'LANG'

ENV_BRAND = 'BRAND'
ENV_ENVIRONMENT = 'ENVIRONMENT'
ENV_STORE = 'STORE'
ENV_ANDROID_BINARY_TYPE = 'ANDROID_BINARY_TYPE'

ENV_PROD_GRAPHQL_BASE = 'PROD_GRAPHQL_BASE'
ENV_PROD_SEGMENT_IOS_WRITE_KEY = 'PROD_SEGMENT_IOS_WRITE_KEY'
ENV_PROD_SEGMENT_ANDROID_WRITE_KEY = 'PROD_SEGMENT_ANDROID_WRITE_KEY'
ENV_PROD_SENTRY_DSN = 'PROD_SENTRY_DSN'
ENV_PROD_LOG_TO_SENTRY = 'PROD_LOG_TO_SENTRY'
ENV_PROD_CODE_PUSH_ENABLED = 'PROD_CODE_PUSH_ENABLED'
ENV_PROD_CODE_PUSH_ANDROID_DEPLOYMENT_KEY = 'PROD_CODE_PUSH_ANDROID_DEPLOYMENT_KEY'
ENV_PROD_CODE_PUSH_IOS_DEPLOYMENT_KEY = 'PROD_CODE_PUSH_IOS_DEPLOYMENT_KEY'
ENV_PROD_DATADOG_ENABLED = 'PROD_DATADOG_ENABLED'
ENV_PROD_DATADOG_CLIENT_TOKEN = 'PROD_DATADOG_CLIENT_TOKEN'
ENV_PROD_DATADOG_APPLICATION_ID = 'PROD_DATADOG_APPLICATION_ID'

ENV_QA_GRAPHQL_BASE = 'QA_GRAPHQL_BASE'
ENV_QA_SEGMENT_IOS_WRITE_KEY = 'QA_SEGMENT_IOS_WRITE_KEY'
ENV_QA_SEGMENT_ANDROID_WRITE_KEY = 'QA_SEGMENT_ANDROID_WRITE_KEY'
ENV_QA_SENTRY_DSN = 'QA_SENTRY_DSN'
ENV_QA_LOG_TO_SENTRY = 'QA_LOG_TO_SENTRY'
ENV_QA_CODE_PUSH_ENABLED = 'QA_CODE_PUSH_ENABLED'
ENV_QA_CODE_PUSH_ANDROID_DEPLOYMENT_KEY = 'QA_CODE_PUSH_ANDROID_DEPLOYMENT_KEY'
ENV_QA_CODE_PUSH_IOS_DEPLOYMENT_KEY = 'QA_CODE_PUSH_IOS_DEPLOYMENT_KEY'
ENV_QA_DATADOG_ENABLED = 'QA_DATADOG_ENABLED'
ENV_QA_DATADOG_CLIENT_TOKEN = 'QA_DATADOG_CLIENT_TOKEN'
ENV_QA_DATADOG_APPLICATION_ID = 'QA_DATADOG_APPLICATION_ID'

ENV_PROD_INTERCOM_APP_ID='PROD_INTERCOM_APP_ID'
ENV_PROD_IOS_INTERCOM_API_KEY='PROD_IOS_INTERCOM_API_KEY'
ENV_PROD_ANDROID_INTERCOM_API_KEY='PROD_ANDROID_INTERCOM_API_KEY'
ENV_QA_INTERCOM_APP_ID='QA_INTERCOM_APP_ID'
ENV_QA_IOS_INTERCOM_API_KEY='QA_IOS_INTERCOM_API_KEY'
ENV_QA_ANDROID_INTERCOM_API_KEY='QA_ANDROID_INTERCOM_API_KEY'

ENV_POEDITOR_PROJECT_ID = 'POEDITOR_PROJECT_ID'
ENV_POEDITOR_API_TOKEN = 'POEDITOR_API_TOKEN'

ENV_BUNDLE_VERSION_NAME = 'BUNDLE_VERSION_NAME'

ENV_VARIABLES = [
  ENV_LC_ALL,
  ENV_LANG,

  ENV_BRAND,
  ENV_ENVIRONMENT,

  ENV_PROD_GRAPHQL_BASE,
  ENV_PROD_SEGMENT_IOS_WRITE_KEY,
  ENV_PROD_SEGMENT_ANDROID_WRITE_KEY,
  ENV_PROD_SENTRY_DSN,
  ENV_PROD_LOG_TO_SENTRY,
  ENV_PROD_CODE_PUSH_ENABLED,
  ENV_PROD_CODE_PUSH_ANDROID_DEPLOYMENT_KEY,
  ENV_PROD_CODE_PUSH_IOS_DEPLOYMENT_KEY,
  ENV_PROD_DATADOG_ENABLED,
  ENV_PROD_DATADOG_CLIENT_TOKEN,
  ENV_PROD_DATADOG_APPLICATION_ID,

  ENV_QA_GRAPHQL_BASE,
  ENV_QA_SEGMENT_IOS_WRITE_KEY,
  ENV_QA_SEGMENT_ANDROID_WRITE_KEY,
  ENV_QA_SENTRY_DSN,
  ENV_QA_LOG_TO_SENTRY,
  ENV_QA_CODE_PUSH_ENABLED,
  ENV_QA_CODE_PUSH_ANDROID_DEPLOYMENT_KEY,
  ENV_QA_CODE_PUSH_IOS_DEPLOYMENT_KEY,
  ENV_QA_DATADOG_ENABLED,
  ENV_QA_DATADOG_CLIENT_TOKEN,
  ENV_QA_DATADOG_APPLICATION_ID,

  ENV_POEDITOR_PROJECT_ID,
  ENV_POEDITOR_API_TOKEN,
]

def init_environment_variables()
  exported_brand = ENV[ENV_BRAND]
  exported_env = ENV[ENV_ENVIRONMENT]
  Dotenv.overload "#{root_project_directory_path()}/.env"
  if exported_brand.nil? == false and exported_brand.length > 0
    ENV[ENV_BRAND] = exported_brand
  end
  if exported_env.nil? == false and exported_env.length > 0
    ENV[ENV_ENVIRONMENT] = exported_env
  end
  check_common_environment_variables()
end

def check_common_environment_variables()
  check_environment_variable_with_possible_values(ENV_LC_ALL, ['en_US.UTF-8'])
  check_environment_variable_with_possible_values(ENV_LANG, ['en_US.UTF-8'])

  check_environment_variable_with_possible_values(ENV_PROD_LOG_TO_SENTRY, ['true', 'false'])
  check_environment_variable_with_possible_values(ENV_QA_LOG_TO_SENTRY, ['true', 'false'])
  check_environment_variable_with_possible_values(ENV_PROD_CODE_PUSH_ENABLED, ['true', 'false'])
  check_environment_variable_with_possible_values(ENV_QA_CODE_PUSH_ENABLED, ['true', 'false'])
  check_environment_variable_with_possible_values(ENV_PROD_DATADOG_ENABLED, ['true', 'false'])
  check_environment_variable_with_possible_values(ENV_QA_DATADOG_ENABLED, ['true', 'false'])

  check_environment_variables(ENV_VARIABLES)
end

def check_environment_variable_with_possible_values(variable_name, possible_values)
  if ENV[variable_name].nil? or ENV[variable_name].length == 0 or !(possible_values.include? ENV[variable_name])
    if possible_values.length == 1
      notify("Add 'export #{variable_name}=#{possible_values[0]}' to your source file or '#{variable_name}=#{possible_values[0]}' to .env file")
    else
      notify("Add 'export #{variable_name}=???' to your source file or '#{variable_name}=???' to .env file. Possible values: #{possible_values}")
    end
  end
end

def check_environment_variables(variables)
  variables.each { |variable| check_environment_variable(variable) }
end

def check_environment_variable(variable_name)
  if ENV[variable_name].nil? or ENV[variable_name].length == 0
    notify("Add 'export #{variable_name}=???' to your source file or '#{variable_name}=???' to .env file")
  end
end

def notify(message)
  puts "Warning! #{message}"
end
