// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_STORAGE_SAVEGAME_FAKE_H_
#define COBALT_STORAGE_SAVEGAME_FAKE_H_

#if defined(COBALT_BUILD_TYPE_GOLD)
#error Only for use in non production builds
#endif

#include <memory>

#include "cobalt/storage/savegame.h"

namespace cobalt {
namespace storage {

// We pretend to provide persistent storage for a test savegame.
// We only support a single "file".
class SavegameFake : public Savegame {
 public:
  explicit SavegameFake(const Options& options);

  ~SavegameFake() override {
    if (options_.delete_on_destruction) {
      Delete();
    }
  }

  bool PlatformRead(ByteVector* bytes, size_t max_to_read) override;
  bool PlatformWrite(const ByteVector& bytes) override;
  bool PlatformDelete() override;
  static std::unique_ptr<Savegame> Create(const Options& options);

 private:
  static ByteVector* s_persistent_data_;
};

}  // namespace storage
}  // namespace cobalt

#endif  // COBALT_STORAGE_SAVEGAME_FAKE_H_
