// 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 __TOKEN_REPLACER_H__
#define __TOKEN_REPLACER_H__

#include <regex>
#include <string>

class TokenReplacer {
 public:
  TokenReplacer() = delete;
  TokenReplacer(const std::string& host,
                const std::string& user,
                const std::string& title,
                const std::string& copies);

  // For testing purposes
  const std::string& GetTitle() const { return title_; };

  // Replaces tokens in the @PJL section of the print job as follows:
  // 1) GETMYHOST is replaced with host
  // 2) GEYMYUSERNAME is replaced with user
  // 3) GETMYJOBNAME is replaced with an escaped title
  // 4) GETMYCOPIES is replaced with copies
  const std::string TokenizeLine(std::string line) const;

 private:
  // Escape a string according to the following rules (see myjob in
  // fax-pnh-filter for the rules):
  // 1) One or two backslashes in sequence are replaced with one backslash
  // 2) double-quotes are replaced with single-quotes
  //
  // Note that fax-pnh-filter has additional rules for ampersands & slashes, but
  // these are only to deal with the fact that the title string is being passed
  // to sed on the command-line, so those characters are being escaped because
  // they would be interpreted on the command-line as bash control characters.
  // The outputted title from the filter would revert \& and \/ to & and /
  // respectively. Therefore there is no need to escape those characters here.
  static std::string EscapeTitle(std::string title);

  const std::string title_;
  const std::regex re_host_;
  const std::string host_replacement_;
  const std::regex re_user_;
  const std::string user_replacement_;
  const std::regex re_title_;
  const std::string title_replacement_;
  const std::regex re_copies_;
  const std::string copies_replacement_;
};

#endif // __TOKEN_REPLACER_H__