// 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 SERVICES_MEDIA_FRAMEWORK_METADATA_H_
#define SERVICES_MEDIA_FRAMEWORK_METADATA_H_

#include <memory>
#include <string>

#include "base/macros.h"
#include "services/media/framework/safe_clone.h"

namespace mojo {
namespace media {

class Metadata;

// Container for content metadata.
// TODO(dalesat): Probably needs to be extensible. Consider using map-like.
class Metadata {
 public:
  static std::unique_ptr<Metadata> Create(
      uint64_t duration_ns,
      const std::string& title,
      const std::string& artist,
      const std::string& album,
      const std::string& publisher,
      const std::string& genre,
      const std::string& composer);

  ~Metadata();

  uint64_t duration_ns() const { return duration_ns_; }

  const std::string& title() const { return title_; }

  const std::string& artist() const { return artist_; }

  const std::string& album() const { return album_; }

  const std::string& publisher() const { return publisher_; }

  const std::string& genre() const { return genre_; }

  const std::string& composer() const { return composer_; }

  std::unique_ptr<Metadata> Clone() const {
    return Create(
        duration_ns_,
        title_,
        artist_,
        album_,
        publisher_,
        genre_,
        composer_);
  }

 private:
  Metadata(
      uint64_t duration_ns,
      const std::string& title,
      const std::string& artist,
      const std::string& album,
      const std::string& publisher,
      const std::string& genre,
      const std::string& composer);

  uint64_t duration_ns_;
  std::string title_;
  std::string artist_;
  std::string album_;
  std::string publisher_;
  std::string genre_;
  std::string composer_;

  DISALLOW_COPY_AND_ASSIGN(Metadata);
};

}  // namespace media
}  // namespace mojo

#endif // SERVICES_MEDIA_FRAMEWORK_METADATA_H_
