// Copyright 2020 The Tint Authors.
//
// 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 SRC_TINT_DIAGNOSTIC_DIAGNOSTIC_H_
#define SRC_TINT_DIAGNOSTIC_DIAGNOSTIC_H_

#include <memory>
#include <string>
#include <utility>
#include <vector>

#include "src/tint/source.h"

namespace tint::diag {

/// Severity is an enumerator of diagnostic severities.
enum class Severity { Note, Warning, Error, InternalCompilerError, Fatal };

/// @return true iff `a` is more than, or of equal severity to `b`
inline bool operator>=(Severity a, Severity b) {
  return static_cast<int>(a) >= static_cast<int>(b);
}

/// System is an enumerator of Tint systems that can be the originator of a
/// diagnostic message.
enum class System {
  AST,
  Clone,
  Inspector,
  Program,
  ProgramBuilder,
  Reader,
  Resolver,
  Semantic,
  Symbol,
  Test,
  Transform,
  Utils,
  Writer,
};

/// Diagnostic holds all the information for a single compiler diagnostic
/// message.
class Diagnostic {
 public:
  /// Constructor
  Diagnostic();
  /// Copy constructor
  Diagnostic(const Diagnostic&);
  /// Destructor
  ~Diagnostic();

  /// Copy assignment operator
  /// @return this diagnostic
  Diagnostic& operator=(const Diagnostic&);

  /// severity is the severity of the diagnostic message.
  Severity severity = Severity::Error;
  /// source is the location of the diagnostic.
  Source source;
  /// message is the text associated with the diagnostic.
  std::string message;
  /// system is the Tint system that raised the diagnostic.
  System system;
  /// code is the error code, for example a validation error might have the code
  /// `"v-0001"`.
  const char* code = nullptr;
  /// A shared pointer to a Source::File. Only used if the diagnostic Source
  /// points to a file that was created specifically for this diagnostic
  /// (usually an ICE).
  std::shared_ptr<Source::File> owned_file = nullptr;
};

/// List is a container of Diagnostic messages.
class List {
 public:
  /// iterator is the type used for range based iteration.
  using iterator = std::vector<Diagnostic>::const_iterator;

  /// Constructs the list with no elements.
  List();

  /// Copy constructor. Copies the diagnostics from `list` into this list.
  /// @param list the list of diagnostics to copy into this list.
  List(std::initializer_list<Diagnostic> list);

  /// Copy constructor. Copies the diagnostics from `list` into this list.
  /// @param list the list of diagnostics to copy into this list.
  List(const List& list);

  /// Move constructor. Moves the diagnostics from `list` into this list.
  /// @param list the list of diagnostics to move into this list.
  List(List&& list);

  /// Destructor
  ~List();

  /// Assignment operator. Copies the diagnostics from `list` into this list.
  /// @param list the list to copy into this list.
  /// @return this list.
  List& operator=(const List& list);

  /// Assignment move operator. Moves the diagnostics from `list` into this
  /// list.
  /// @param list the list to move into this list.
  /// @return this list.
  List& operator=(List&& list);

  /// adds a diagnostic to the end of this list.
  /// @param diag the diagnostic to append to this list.
  void add(Diagnostic&& diag) {
    if (diag.severity >= Severity::Error) {
      error_count_++;
    }
    entries_.emplace_back(std::move(diag));
  }

  /// adds a list of diagnostics to the end of this list.
  /// @param list the diagnostic to append to this list.
  void add(const List& list) {
    for (auto diag : list) {
      add(std::move(diag));
    }
  }

  /// adds the note message with the given Source to the end of this list.
  /// @param system the system raising the note message
  /// @param note_msg the note message
  /// @param source the source of the note diagnostic
  void add_note(System system,
                const std::string& note_msg,
                const Source& source) {
    diag::Diagnostic note{};
    note.severity = diag::Severity::Note;
    note.system = system;
    note.source = source;
    note.message = note_msg;
    add(std::move(note));
  }

  /// adds the warning message with the given Source to the end of this list.
  /// @param system the system raising the warning message
  /// @param warning_msg the warning message
  /// @param source the source of the warning diagnostic
  void add_warning(System system,
                   const std::string& warning_msg,
                   const Source& source) {
    diag::Diagnostic warning{};
    warning.severity = diag::Severity::Warning;
    warning.system = system;
    warning.source = source;
    warning.message = warning_msg;
    add(std::move(warning));
  }

  /// adds the error message without a source to the end of this list.
  /// @param system the system raising the error message
  /// @param err_msg the error message
  void add_error(System system, std::string err_msg) {
    diag::Diagnostic error{};
    error.severity = diag::Severity::Error;
    error.system = system;
    error.message = std::move(err_msg);
    add(std::move(error));
  }

  /// adds the error message with the given Source to the end of this list.
  /// @param system the system raising the error message
  /// @param err_msg the error message
  /// @param source the source of the error diagnostic
  void add_error(System system, std::string err_msg, const Source& source) {
    diag::Diagnostic error{};
    error.severity = diag::Severity::Error;
    error.system = system;
    error.source = source;
    error.message = std::move(err_msg);
    add(std::move(error));
  }

  /// adds the error message with the given code and Source to the end of this
  /// list.
  /// @param system the system raising the error message
  /// @param code the error code
  /// @param err_msg the error message
  /// @param source the source of the error diagnostic
  void add_error(System system,
                 const char* code,
                 std::string err_msg,
                 const Source& source) {
    diag::Diagnostic error{};
    error.code = code;
    error.severity = diag::Severity::Error;
    error.system = system;
    error.source = source;
    error.message = std::move(err_msg);
    add(std::move(error));
  }

  /// adds an internal compiler error message to the end of this list.
  /// @param system the system raising the error message
  /// @param err_msg the error message
  /// @param source the source of the internal compiler error
  /// @param file the Source::File owned by this diagnostic
  void add_ice(System system,
               const std::string& err_msg,
               const Source& source,
               std::shared_ptr<Source::File> file) {
    diag::Diagnostic ice{};
    ice.severity = diag::Severity::InternalCompilerError;
    ice.system = system;
    ice.source = source;
    ice.message = err_msg;
    ice.owned_file = std::move(file);
    add(std::move(ice));
  }

  /// @returns true iff the diagnostic list contains errors diagnostics (or of
  /// higher severity).
  bool contains_errors() const { return error_count_ > 0; }
  /// @returns the number of error diagnostics (or of higher severity).
  size_t error_count() const { return error_count_; }
  /// @returns the number of entries in the list.
  size_t count() const { return entries_.size(); }
  /// @returns the first diagnostic in the list.
  iterator begin() const { return entries_.begin(); }
  /// @returns the last diagnostic in the list.
  iterator end() const { return entries_.end(); }

  /// @returns a formatted string of all the diagnostics in this list.
  std::string str() const;

 private:
  std::vector<Diagnostic> entries_;
  size_t error_count_ = 0;
};

}  // namespace tint::diag

#endif  // SRC_TINT_DIAGNOSTIC_DIAGNOSTIC_H_
