# frozen_string_literal: true

module DevOpsReport
  class MetricPresenter < Gitlab::View::Presenter::Simple
    presents ::DevOpsReport::Metric

    delegate :created_at, to: :subject

    def cards
      [
        Card.new(
          metric: subject,
          title: 'Issues',
          description: 'created per active user',
          feature: 'issues',
          blog: 'https://www2.deloitte.com/content/dam/Deloitte/se/Documents/technology-media-telecommunications/deloitte-digital-collaboration.pdf'
        ),
        Card.new(
          metric: subject,
          title: 'Comments',
          description: 'created per active user',
          feature: 'notes',
          blog: 'http://conversationaldevelopment.com/why/'
        ),
        Card.new(
          metric: subject,
          title: 'Milestones',
          description: 'created per active user',
          feature: 'milestones',
          blog: 'http://conversationaldevelopment.com/shorten-cycle/',
          docs: help_page_path('user/project/milestones/index')
        ),
        Card.new(
          metric: subject,
          title: 'Boards',
          description: 'created per active user',
          feature: 'boards',
          blog: 'http://jpattonassociates.com/user-story-mapping/',
          docs: help_page_path('user/project/issue_board')
        ),
        Card.new(
          metric: subject,
          title: 'Merge requests',
          description: 'per active user',
          feature: 'merge_requests',
          blog: 'https://8thlight.com/blog/uncle-bob/2013/02/01/The-Humble-Craftsman.html',
          docs: help_page_path('user/project/merge_requests/index')
        ),
        Card.new(
          metric: subject,
          title: 'Pipelines',
          description: 'created per active user',
          feature: 'ci_pipelines',
          blog: 'https://martinfowler.com/bliki/ContinuousDelivery.html',
          docs: help_page_path('ci/index')
        ),
        Card.new(
          metric: subject,
          title: 'Environments',
          description: 'created per active user',
          feature: 'environments',
          blog: 'https://about.gitlab.com/2016/08/26/ci-deployment-and-environments/',
          docs: help_page_path('ci/environments')
        ),
        Card.new(
          metric: subject,
          title: 'Deployments',
          description: 'created per active user',
          feature: 'deployments',
          blog: 'https://puppet.com/blog/continuous-delivery-vs-continuous-deployment-what-s-diff'
        ),
        Card.new(
          metric: subject,
          title: 'Monitoring',
          description: 'fraction of all projects',
          feature: 'projects_prometheus_active',
          blog: 'https://prometheus.io/docs/introduction/overview/',
          docs: help_page_path('user/project/integrations/prometheus')
        ),
        Card.new(
          metric: subject,
          title: 'Service Desk',
          description: 'issues created per active user',
          feature: 'service_desk_issues',
          blog: 'http://blogs.forrester.com/kate_leggett/17-01-30-top_trends_for_customer_service_in_2017_operations_become_smarter_and_more_strategic',
          docs: 'https://docs.gitlab.com/ee/user/project/service_desk.html'
        )
      ]
    end

    def idea_to_production_steps
      [
        IdeaToProductionStep.new(
          metric: subject,
          title: 'Idea',
          features: %w(issues)
        ),
        IdeaToProductionStep.new(
          metric: subject,
          title: 'Issue',
          features: %w(issues notes)
        ),
        IdeaToProductionStep.new(
          metric: subject,
          title: 'Plan',
          features: %w(milestones boards)
        ),
        IdeaToProductionStep.new(
          metric: subject,
          title: 'Code',
          features: %w(merge_requests)
        ),
        IdeaToProductionStep.new(
          metric: subject,
          title: 'Commit',
          features: %w(merge_requests)
        ),
        IdeaToProductionStep.new(
          metric: subject,
          title: 'Test',
          features: %w(ci_pipelines)
        ),
        IdeaToProductionStep.new(
          metric: subject,
          title: 'Review',
          features: %w(ci_pipelines environments)
        ),
        IdeaToProductionStep.new(
          metric: subject,
          title: 'Staging',
          features: %w(environments deployments)
        ),
        IdeaToProductionStep.new(
          metric: subject,
          title: 'Production',
          features: %w(deployments)
        ),
        IdeaToProductionStep.new(
          metric: subject,
          title: 'Feedback',
          features: %w(projects_prometheus_active service_desk_issues)
        )
      ]
    end

    # rubocop: disable CodeReuse/ActiveRecord
    def average_percentage_score
      cards.sum(&:percentage_score) / cards.size.to_f
    end
    # rubocop: enable CodeReuse/ActiveRecord
  end
end
