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

#include <memory>

#include "base/macros.h"
#include "ui/display/display_export.h"
#include "ui/display/display_layout.h"

namespace display {

class DisplayLayout;

// A utility class to create a DisplayLayout instance.
class DISPLAY_EXPORT DisplayLayoutBuilder final {
 public:
  // Creates a builder that uses a copy of the |layout| as a source.
  explicit DisplayLayoutBuilder(const DisplayLayout& layout);

  // Creates a builder with the primary display id.
  explicit DisplayLayoutBuilder(int64_t primary_id);

  ~DisplayLayoutBuilder();

  DisplayLayoutBuilder& SetDefaultUnified(bool default_unified);

  DisplayLayoutBuilder& SetMirrored(bool mirrored);

  DisplayLayoutBuilder& ClearPlacements();

  // Adds a display placement.
  DisplayLayoutBuilder& AddDisplayPlacement(int64_t display_id,
                                            int64_t parent_id,
                                            DisplayPlacement::Position position,
                                            int offset);

  // Adds a display placement.
  DisplayLayoutBuilder& AddDisplayPlacement(const DisplayPlacement& placement);

  // Sets the display placement for the secondary display.
  DisplayLayoutBuilder& SetSecondaryPlacement(
      int64_t secondary_id,
      DisplayPlacement::Position position,
      int offset);

  // Returns the DisplayLayout. After this call, the builder becomes invalid.
  std::unique_ptr<DisplayLayout> Build();

 private:
  std::unique_ptr<DisplayLayout> layout_;

  DISALLOW_COPY_AND_ASSIGN(DisplayLayoutBuilder);
};

}  // namespace display

#endif  // UI_DISPLAY_DISPLAY_LAYOUT_BUILDER_H_
