require "active_support/core_ext/integer/time"

Rails.application.configure do
  config.enable_reloading = false
  config.eager_load = true
  config.consider_all_requests_local = false

  # HTTPS obrigatório: redireciona HTTP→HTTPS e marca cookies como "Secure".
  # assume_ssl faz o Rails confiar no TLS terminado no Cloudflare (que envia
  # X-Forwarded-Proto=https), evitando loop de redirecionamento.
  #
  # ⚠️ EFEITO COLATERAL, e não é bug: com assume_ssl o Rails calcula
  # `request.base_url` como https:// SEMPRE. Quem abre o sistema direto pelo
  # IP em HTTP (http://100.75.222.23:3001) manda `Origin: http://...`, a
  # verificação de CSRF compara os dois, não bate, e TODO POST volta 422
  # ("A ação foi recusada por uma verificação de segurança") — enquanto os GETs
  # passam e a tela parece normal. Aconteceu em 27/08/2026 ao importar o plano
  # do romaneio. O uso normal é pelo domínio, onde Origin e base_url são https.
  #
  # O gate abaixo existe para DIAGNÓSTICO pelo IP: `FORCE_SSL=false` no .env
  # devolve o acesso por HTTP puro. Sem a variável (ou com qualquer outro
  # valor) o HTTPS continua obrigatório — o padrão seguro. Antes isto estava
  # fixo aqui e o FORCE_SSL do .env, respeitado no application.rb, não tinha
  # efeito nenhum em produção: as duas configurações se contradiziam.
  unless ENV["FORCE_SSL"] == "false"
    config.assume_ssl = true
    config.force_ssl  = true
  end
  config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info")
  config.log_tags  = [:request_id]
  config.logger    = ActiveSupport::Logger.new(STDOUT).tap { |l| l.formatter = ::Logger::Formatter.new }
                                          .then { |l| ActiveSupport::TaggedLogging.new(l) }

  config.cache_store = :memory_store
  config.active_storage.service = :local if defined?(ActiveStorage)

  config.action_mailer.perform_caching = false
  config.action_mailer.default_url_options = { host: ENV.fetch("APP_HOST", "localhost:3000") }

  # `= true` significa "caia no default_locale" — e o default AQUI é o próprio
  # pt-BR, então o fallback apontava para si mesmo e qualquer chave ausente
  # virava "Translation missing" NA TELA DO USUÁRIO (aconteceu em 27/08/2026 na
  # tela de login, com devise.failure.unauthenticated). Em development o
  # config/application.rb já usa [:en] e por isso o problema não aparecia lá.
  # Mantido igual ao application.rb: chave faltando mostra o texto em inglês,
  # que é feio mas legível — nunca a mensagem de erro do i18n.
  config.i18n.fallbacks = [:en]
  config.active_support.report_deprecations = false
  config.active_record.dump_schema_after_migration = false

  # ── Hosts aceitos (proteção contra DNS rebinding) ─────────────────────────
  # Regra do Rails: lista VAZIA = aceita qualquer Host; lista com QUALQUER item
  # = só o que estiver nela entra. Por isso a linha abaixo, que parece só
  # "liberar o APP_HOST", na verdade LIGA a verificação e bloqueia todo o resto
  # com "ActionDispatch::HostAuthorization ... Blocked hosts: <host>".
  #
  # ⚠️ APP_HOST tem que vir SEM "https://": com o esquema, este split libera um
  #    host chamado "https" e nada funciona.
  config.hosts << ENV["APP_HOST"]&.split(":")&.first if ENV["APP_HOST"].present?

  # O próprio servidor. Sem isto, um `curl http://127.0.0.1:3001/` de dentro do
  # NAS — que é o teste que separa "app caiu" de "proxy errado" — volta
  # bloqueado e faz parecer que a aplicação está quebrada.
  config.hosts += ["localhost", "127.0.0.1", "[::1]"]

  # Endereços extras, separados por vírgula. Caso real (27/08/2026): o acesso
  # pela rede interna chega com `Host: 100.75.222.23:3001` (o IP do NAS), que
  # não bate com o domínio público e caía em "Blocked hosts". A porta é
  # ignorada pelo Rails na comparação — basta o IP/nome.
  #   HOSTS_PERMITIDOS=100.75.222.23,10.0.0.20
  ENV.fetch("HOSTS_PERMITIDOS", "").split(",").map(&:strip).reject(&:empty?).each do |permitido|
    config.hosts << permitido
  end

  # Escotilha de emergência: desliga a verificação por completo. Último recurso —
  # com ela ligada, qualquer domínio apontado para este servidor é aceito.
  config.hosts.clear if ENV["RAILS_ALLOW_ALL_HOSTS"] == "true"
end
