# frozen_string_literal: true

class FAQController < ApplicationController
  before_action :load_faq_data, only: :show

  def index
    @faqs = loader_service.all
  end

  def show
    @renderer = Redcarpet::Markdown.new(Redcarpet::TrustedRenderer.new(view_context), autolink: true)

    @siblings = loader_service.faqs_for_category(@metadata[:category])
  end

  private

  def loader_service
    @loader_service ||= begin
                          substitutions = {
                            application_base_url: Current.application_base_url,
                            application_name: Current.application_name,
                            contact_email: Current.contact_email
                          }.merge(dynamic_substitutions)

                          FAQsLoaderService.new(substitutions)
                        end
  end

  def load_faq_data
    path = "#{params[:category]}/#{params[:slug]}"
    faq_data = loader_service.find(path)

    @content = faq_data.content
    @metadata = faq_data.front_matter.symbolize_keys
  rescue KeyError
    raise ActionController::RoutingError.new("FAQ not found: #{path}")
  end

  # Hash of dynamic values used for substitutions.
  # The values are fetched from or calculated into the Rails cache.
  def dynamic_substitutions
    {
      # Example:
      # procedures_count: Rails.cache.fetch("faq/procedures_count", expires_in: 1.day) { helpers.number_with_delimiter(Procedure.publiee.count, delimiter: ' ') },
    }
  end
end
