// Copyright 2014 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_GCM_DRIVER_GCM_ACTIVITY_H_
#define COMPONENTS_GCM_DRIVER_GCM_ACTIVITY_H_

#include <string>
#include <vector>

#include "base/time/time.h"

namespace gcm {

// Contains data that are common to all activity kinds below.
struct Activity {
  Activity();
  virtual ~Activity();

  base::Time time;
  std::string event;    // A short description of the event.
  std::string details;  // Any additional detail about the event.
};

// Contains relevant data of a connection activity.
struct ConnectionActivity : Activity {
  ConnectionActivity();
  virtual ~ConnectionActivity();
};

// Contains relevant data of a check-in activity.
struct CheckinActivity : Activity {
  CheckinActivity();
  virtual ~CheckinActivity();
};

// Contains relevant data of a registration/unregistration step.
struct RegistrationActivity : Activity {
  RegistrationActivity();
  virtual ~RegistrationActivity();

  std::string app_id;
  std::string sender_ids;  // Comma separated sender ids.
};

// Contains relevant data of a message receiving event.
struct ReceivingActivity : Activity {
  ReceivingActivity();
  virtual ~ReceivingActivity();

  std::string app_id;
  std::string from;
  int message_byte_size;
};

// Contains relevant data of a send-message step.
struct SendingActivity : Activity {
  SendingActivity();
  virtual ~SendingActivity();

  std::string app_id;
  std::string receiver_id;
  std::string message_id;
};

struct RecordedActivities {
  RecordedActivities();
  virtual ~RecordedActivities();

  std::vector<CheckinActivity> checkin_activities;
  std::vector<ConnectionActivity> connection_activities;
  std::vector<RegistrationActivity> registration_activities;
  std::vector<ReceivingActivity> receiving_activities;
  std::vector<SendingActivity> sending_activities;
};

}  // namespace gcm

#endif  // COMPONENTS_GCM_DRIVER_GCM_ACTIVITY_H_