// Copyright 2018 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_BASE_VERSION_COMPATIBILITY_H_
#define COBALT_BASE_VERSION_COMPATIBILITY_H_

#include <string>

#include "base/atomicops.h"
#include "base/memory/singleton.h"
#include "cobalt/base/c_val.h"

namespace base {

// This thread-safe singleton class provides basic support for Cobalt version
// compatibility validations.
// NOTE: This class exists for convenience and can be removed when we create a
// better mechanism for dependency injection in Cobalt.
class VersionCompatibility {
 public:
  // Method to get the singleton instance of this class.
  static VersionCompatibility* GetInstance();

  void SetMinimumVersion(int minimum_version);
  int GetMinimumVersion() const;

  // Called when a version compatibility violation is encountered.
  void ReportViolation(const std::string& violation_info);

 private:
  friend struct base::StaticMemorySingletonTraits<VersionCompatibility>;

  VersionCompatibility();
  ~VersionCompatibility() = default;

  // The number of violations that have been encountered.
  base::CVal<int, base::CValDebug> violation_count;

  // The minimum version of Cobalt to validate compatibility against.
  base::subtle::Atomic32 minimum_version_;

  DISALLOW_COPY_AND_ASSIGN(VersionCompatibility);
};

}  // namespace base

#endif  // COBALT_BASE_VERSION_COMPATIBILITY_H_
