# frozen_string_literal: true

module API
  # Pages Internal API
  module Internal
    class Pages < Grape::API
      before do
        authenticate_gitlab_pages_request!
      end

      helpers do
        def authenticate_gitlab_pages_request!
          unauthorized! unless Gitlab::Pages.verify_api_request(headers)
        end
      end

      namespace 'internal' do
        namespace 'pages' do
          desc 'Indicates that pages API is enabled and auth token is valid' do
            detail 'This feature was introduced in GitLab 12.10.'
          end
          get "status" do
            no_content!
          end

          desc 'Get GitLab Pages domain configuration by hostname' do
            detail 'This feature was introduced in GitLab 12.3.'
          end
          params do
            requires :host, type: String, desc: 'The host to query for'
          end
          get "/" do
            serverless_domain_finder = ServerlessDomainFinder.new(params[:host])
            if serverless_domain_finder.serverless?
              # Handle Serverless domains
              serverless_domain = serverless_domain_finder.execute
              no_content! unless serverless_domain

              virtual_domain = Serverless::VirtualDomain.new(serverless_domain)
              no_content! unless virtual_domain

              present virtual_domain, with: Entities::Internal::Serverless::VirtualDomain
            else
              # Handle Pages domains
              host = Namespace.find_by_pages_host(params[:host]) || PagesDomain.find_by_domain_case_insensitive(params[:host])
              no_content! unless host

              virtual_domain = host.pages_virtual_domain
              no_content! unless virtual_domain

              present virtual_domain, with: Entities::Internal::Pages::VirtualDomain
            end
          end
        end
      end
    end
  end
end
