
// 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_SOURCE_H_
#define SRC_SOURCE_H_

#include <iostream>
#include <string>
#include <string_view>
#include <tuple>
#include <vector>

namespace tint {

/// Source describes a range of characters within a source file.
class Source {
 public:
  /// FileContent describes the content of a source file.
  class FileContent {
   public:
    /// Constructs the FileContent with the given file content.
    /// @param data the file contents
    explicit FileContent(const std::string& data);

    /// Copy constructor
    /// @param rhs the FileContent to copy
    FileContent(const FileContent& rhs);

    /// Destructor
    ~FileContent();

    /// The original un-split file content
    const std::string data;
    /// A string_view over #data
    const std::string_view data_view;
    /// #data split by lines
    const std::vector<std::string_view> lines;
  };

  /// File describes a source file, including path and content.
  class File {
   public:
    /// Constructs the File with the given file path and content.
    /// @param p the path for this file
    /// @param c the file contents
    inline File(const std::string& p, const std::string& c)
        : path(p), content(c) {}

    /// Copy constructor
    File(const File&) = default;

    /// Move constructor
    File(File&&) = default;

    /// Destructor
    ~File();

    /// file path
    const std::string path;
    /// file content
    const FileContent content;
  };

  /// Location holds a 1-based line and column index.
  class Location {
   public:
    /// the 1-based line number. 0 represents no line information.
    size_t line = 0;
    /// the 1-based column number. 0 represents no column information.
    size_t column = 0;

    /// Returns true of `this` location is lexicographically less than `rhs`
    /// @param rhs location to compare against
    /// @returns true if `this` < `rhs`
    inline bool operator<(const Source::Location& rhs) {
      return std::tie(line, column) < std::tie(rhs.line, rhs.column);
    }

    /// Returns true of `this` location is equal to `rhs`
    /// @param rhs location to compare against
    /// @returns true if `this` == `rhs`
    inline bool operator==(const Location& rhs) const {
      return line == rhs.line && column == rhs.column;
    }

    /// Returns true of `this` location is not equal to `rhs`
    /// @param rhs location to compare against
    /// @returns true if `this` != `rhs`
    inline bool operator!=(const Location& rhs) const {
      return !(*this == rhs);
    }
  };

  /// Range holds a Location interval described by [begin, end).
  class Range {
   public:
    /// Constructs a zero initialized Range.
    inline Range() = default;

    /// Constructs a zero-length Range starting at `loc`
    /// @param loc the start and end location for the range
    inline constexpr explicit Range(const Location& loc)
        : begin(loc), end(loc) {}

    /// Constructs the Range beginning at `b` and ending at `e`
    /// @param b the range start location
    /// @param e the range end location
    inline constexpr Range(const Location& b, const Location& e)
        : begin(b), end(e) {}

    /// Return a column-shifted Range
    /// @param n the number of characters to shift by
    /// @returns a Range with a #begin and #end column shifted by `n`
    inline Range operator+(size_t n) const {
      return Range{{begin.line, begin.column + n}, {end.line, end.column + n}};
    }

    /// Returns true of `this` range is not equal to `rhs`
    /// @param rhs range to compare against
    /// @returns true if `this` != `rhs`
    inline bool operator==(const Range& rhs) const {
      return begin == rhs.begin && end == rhs.end;
    }

    /// Returns true of `this` range is equal to `rhs`
    /// @param rhs range to compare against
    /// @returns true if `this` == `rhs`
    inline bool operator!=(const Range& rhs) const { return !(*this == rhs); }

    /// The location of the first character in the range.
    Location begin;
    /// The location of one-past the last character in the range.
    Location end;
  };

  /// Constructs the Source with an zero initialized Range and null File.
  inline Source() : range() {}

  /// Constructs the Source with the Range `rng` and a null File
  /// @param rng the source range
  inline explicit Source(const Range& rng) : range(rng) {}

  /// Constructs the Source with the Range `loc` and a null File
  /// @param loc the start and end location for the source range
  inline explicit Source(const Location& loc) : range(Range(loc)) {}

  /// Constructs the Source with the Range `rng` and File `file`
  /// @param rng the source range
  /// @param f the source file
  inline Source(const Range& rng, File const* f) : range(rng), file(f) {}

  /// @returns a Source that points to the begin range of this Source.
  inline Source Begin() const { return Source(Range{range.begin}, file); }

  /// @returns a Source that points to the end range of this Source.
  inline Source End() const { return Source(Range{range.end}, file); }

  /// Return a column-shifted Source
  /// @param n the number of characters to shift by
  /// @returns a Source with the range's columns shifted by `n`
  inline Source operator+(size_t n) const { return Source(range + n, file); }

  /// Returns true of `this` Source is lexicographically less than `rhs`
  /// @param rhs source to compare against
  /// @returns true if `this` < `rhs`
  inline bool operator<(const Source& rhs) {
    if (file != rhs.file) {
      return false;
    }
    return range.begin < rhs.range.begin;
  }

  /// Helper function that returns the range union of two source locations. The
  /// `start` and `end` locations are assumed to refer to the same source file.
  /// @param start the start source of the range
  /// @param end the end source of the range
  /// @returns the combined source
  inline static Source Combine(const Source& start, const Source& end) {
    return Source(Source::Range(start.range.begin, end.range.end), start.file);
  }

  /// range is the span of text this source refers to in #file
  Range range;
  /// file is the optional source content this source refers to
  const File* file = nullptr;
};

/// Writes the Source::Location to the std::ostream.
/// @param out the std::ostream to write to
/// @param loc the location to write
/// @returns out so calls can be chained
inline std::ostream& operator<<(std::ostream& out,
                                const Source::Location& loc) {
  out << loc.line << ":" << loc.column;
  return out;
}

/// Writes the Source::Range to the std::ostream.
/// @param out the std::ostream to write to
/// @param range the range to write
/// @returns out so calls can be chained
inline std::ostream& operator<<(std::ostream& out, const Source::Range& range) {
  out << "[" << range.begin << ", " << range.end << "]";
  return out;
}

/// Writes the Source to the std::ostream.
/// @param out the std::ostream to write to
/// @param source the source to write
/// @returns out so calls can be chained
std::ostream& operator<<(std::ostream& out, const Source& source);

/// Writes the Source::FileContent to the std::ostream.
/// @param out the std::ostream to write to
/// @param content the file content to write
/// @returns out so calls can be chained
inline std::ostream& operator<<(std::ostream& out,
                                const Source::FileContent& content) {
  out << content.data;
  return out;
}

}  // namespace tint

#endif  // SRC_SOURCE_H_
