// Copyright 2020 The Chromium OS 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 CROSLOG_MULTIPLEXER_H_
#define CROSLOG_MULTIPLEXER_H_

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

#include "base/files/file_path.h"
#include "base/observer_list.h"
#include "base/observer_list_types.h"

#include "croslog/log_entry.h"
#include "croslog/log_entry_reader.h"
#include "croslog/log_parser.h"

namespace croslog {

// Read logs from multiple files with merging the lines.
class Multiplexer : public LogLineReader::Observer {
 public:
  class Observer : public base::CheckedObserver {
   public:
    virtual void OnLogFileChanged() = 0;
  };

  Multiplexer();
  Multiplexer(const Multiplexer&) = delete;
  Multiplexer& operator=(const Multiplexer&) = delete;

  // Add a source log file to read.
  void AddSource(base::FilePath log_file,
                 std::unique_ptr<LogParser> parser,
                 bool install_change_watcher);
  // Start watching changes from the currently watched files.
  void StartWatchingFileChange();

  // Read the next line from log.
  MaybeLogEntry Forward();
  // Read the previous line from log.
  MaybeLogEntry Backward();

  // Set the position to read next.
  void SetLinesFromLast(uint32_t pos);

  // Add a observer to retrieve file change events.
  void AddObserver(Observer* obs);
  // Remove a observer to retrieve file change events.
  void RemoveObserver(Observer* obs);

 private:
  struct LogSource {
    LogSource(base::FilePath log_file,
              std::unique_ptr<LogParser> parser_in,
              bool install_change_watcher);

    LogEntryReader reader;
    MaybeLogEntry cache_next_forward;
    MaybeLogEntry cache_next_backward;
  };

  void OnFileChanged(LogLineReader* reader) override;

  std::vector<std::unique_ptr<LogSource>> sources_;
  base::ObserverList<Observer> observers_;
};

}  // namespace croslog

#endif  // CROSLOG_MULTIPLEXER_H_
