// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTIONS_METRICS_H_
#define COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTIONS_METRICS_H_

#include <utility>
#include <vector>

#include "base/time/time.h"
#include "components/ntp_snippets/category.h"
#include "ui/base/window_open_disposition.h"

namespace ntp_snippets {
namespace metrics {

// |is_category_visible| contains true iff the corresponding category can be
// seen by the user on this page (even if it is empty). It does not depend on
// whether the user actually saw the category.
void OnPageShown(const std::vector<Category>& categories,
                 const std::vector<int>& suggestions_per_category,
                 const std::vector<bool>& is_category_visible);

// Should only be called once per NTP for each suggestion.
void OnSuggestionShown(int global_position,
                       Category category,
                       int position_in_category,
                       base::Time publish_date,
                       float score,
                       base::Time fetch_date);

// TODO(crbug.com/682160): Take struct, so that one could not mix up the
// order of arguments.
void OnSuggestionOpened(int global_position,
                        Category category,
                        int category_index,
                        int position_in_category,
                        base::Time publish_date,
                        float score,
                        WindowOpenDisposition disposition,
                        bool is_prefetched,
                        bool is_offline);

void OnSuggestionMenuOpened(int global_position,
                            Category category,
                            int position_in_category,
                            base::Time publish_date,
                            float score);

void OnSuggestionDismissed(int global_position,
                           Category category,
                           int position_in_category,
                           bool visited);

void OnSuggestionTargetVisited(Category category, base::TimeDelta visit_time);

void OnCategoryMovedUp(int new_index);

// Should only be called once per NTP for each "more" button.
void OnMoreButtonShown(Category category, int position);

void OnMoreButtonClicked(Category category, int position);

void OnCategoryDismissed(Category category);

void RecordRemoteSuggestionsProviderState(bool enabled);

void RecordContentSuggestionDismissed();

void RecordCategoryDismissed();

void RecordFetchAction();

}  // namespace metrics
}  // namespace ntp_snippets

#endif  // COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTIONS_SERVICE_H_
