module Feroxbuster
  #
  # Represents the statistics data, parsed from the last line of a `.json`
  # output file.
  #
  class Statistics

    # @return [Integer]
    attr_reader :timeouts

    # @return [Integer]
    attr_reader :requests

    # @return [Integer]
    attr_reader :expected_per_scan

    # @return [Integer]
    attr_reader :total_expected

    # @return [Integer]
    attr_reader :errors

    # @return [Integer]
    attr_reader :successes

    # @return [Integer]
    attr_reader :redirects

    # @return [Integer]
    attr_reader :client_errors

    # @return [Integer]
    attr_reader :server_errors

    # @return [Integer]
    attr_reader :total_scans

    # @return [Integer]
    attr_reader :initial_targets

    # @return [Integer]
    attr_reader :links_extracted

    # @return [Integer]
    attr_reader :extensions_collected

    # @return [Integer]
    attr_reader :status_200s

    # @return [Integer]
    attr_reader :status_301s

    # @return [Integer]
    attr_reader :status_302s

    # @return [Integer]
    attr_reader :status_401s

    # @return [Integer]
    attr_reader :status_403s

    # @return [Integer]
    attr_reader :status_429s

    # @return [Integer]
    attr_reader :status_500s

    # @return [Integer]
    attr_reader :status_503s

    # @return [Integer]
    attr_reader :status_504s

    # @return [Integer]
    attr_reader :status_508s

    # @return [Integer]
    attr_reader :wildcards_filtered

    # @return [Integer]
    attr_reader :responses_filtered

    # @return [Integer]
    attr_reader :resources_discovered

    # @return [Integer]
    attr_reader :url_format_errors

    # @return [Integer]
    attr_reader :redirection_errors

    # @return [Integer]
    attr_reader :connection_errors

    # @return [Integer]
    attr_reader :request_errors

    # @return [Array<Float>]
    attr_reader :directory_scan_times

    # @return [Array<Float>]
    attr_reader :total_runtime

    #
    # Initializes the statistics object.
    #
    # @param [Integer] timeouts
    #
    # @param [Integer] requests
    #
    # @param [Integer] expected_per_scan
    #
    # @param [Integer] total_expected
    #
    # @param [Integer] errors
    #
    # @param [Integer] successes
    #
    # @param [Integer] redirects
    #
    # @param [Integer] client_errors
    #
    # @param [Integer] server_errors
    #
    # @param [Integer] total_scans
    #
    # @param [Integer] initial_targets
    #
    # @param [Integer] links_extracted
    #
    # @param [Integer] extensions_collected
    #
    # @param [Integer] status_200s
    #
    # @param [Integer] status_301s
    #
    # @param [Integer] status_302s
    #
    # @param [Integer] status_401s
    #
    # @param [Integer] status_403s
    #
    # @param [Integer] status_429s
    #
    # @param [Integer] status_500s
    #
    # @param [Integer] status_503s
    #
    # @param [Integer] status_504s
    #
    # @param [Integer] status_508s
    #
    # @param [Integer] wildcards_filtered
    #
    # @param [Integer] responses_filtered
    #
    # @param [Integer] resources_discovered
    #
    # @param [Integer] url_format_errors
    #
    # @param [Integer] redirection_errors
    #
    # @param [Integer] connection_errors
    #
    # @param [Integer] request_errors
    #
    # @param [Array<Float>] directory_scan_times
    #
    # @param [Array<Float>] total_runtime
    #
    def initialize(timeouts: 0,
                   requests: 0,
                   expected_per_scan: 6,
                   total_expected: 0,
                   errors: 0,
                   successes: 0,
                   redirects: 0,
                   client_errors: 0,
                   server_errors: 0,
                   total_scans: 0,
                   initial_targets: 0,
                   links_extracted: 0,
                   extensions_collected: 0,
                   status_200s: 0,
                   status_301s: 0,
                   status_302s: 0,
                   status_401s: 0,
                   status_403s: 0,
                   status_429s: 0,
                   status_500s: 0,
                   status_503s: 0,
                   status_504s: 0,
                   status_508s: 0,
                   wildcards_filtered: 0,
                   responses_filtered: 0,
                   resources_discovered: 0,
                   url_format_errors: 0,
                   redirection_errors: 0,
                   connection_errors: 0,
                   request_errors: 0,
                   directory_scan_times: [],
                   total_runtime: [])
      @timeouts = timeouts
      @requests = requests
      @expected_per_scan = expected_per_scan
      @total_expected = total_expected
      @errors = errors
      @successes = successes
      @redirects = redirects
      @client_errors = client_errors
      @server_errors = server_errors
      @total_scans = total_scans
      @initial_targets = initial_targets
      @links_extracted = links_extracted
      @extensions_collected = extensions_collected
      @status_200s = status_200s
      @status_301s = status_301s
      @status_302s = status_302s
      @status_401s = status_401s
      @status_403s = status_403s
      @status_429s = status_429s
      @status_500s = status_500s
      @status_503s = status_503s
      @status_504s = status_504s
      @status_508s = status_508s
      @wildcards_filtered = wildcards_filtered
      @responses_filtered = responses_filtered
      @resources_discovered = resources_discovered
      @url_format_errors = url_format_errors
      @redirection_errors = redirection_errors
      @connection_errors = connection_errors
      @request_errors = request_errors
      @directory_scan_times = directory_scan_times
      @total_runtime = total_runtime
    end

  end
end