#ifndef FS_OFD_TEXTPIECEINFO_H_
#define FS_OFD_TEXTPIECEINFO_H_

#include "common/fs_common.h"

/**
 * @brief Foxit 命名空间。
 *
 * @details Foxit PDF SDK 的所有定义和类都在此命名空间内定义。
 */
namespace foxit {
/**
* @brief ofd 命名空间。
*/
namespace ofd {
/** 此类表示和OFD文本片段信息相关的方法。*/
class TextPieceInfo FS_FINAL : public Object {
 public:
  /**
   * @brief 构造函数。
   */
  TextPieceInfo();

  /** @brief 析构函数。 */
  ~TextPieceInfo();

  /**
   * @brief 构造函数，通过另一个文本片段信息对象。
   *
   * @param[in] other  另一个文本片段信息对象。
   */
  TextPieceInfo(const TextPieceInfo& other);

  /**
   * @brief 赋值操作符。
   *
   * @param[in] other  另一个文本片段信息对象，其值将被赋给当前对象。
   *
   * @return 当前对象自身的引用。
   */
  TextPieceInfo& operator = (const TextPieceInfo& other);

  /**
   * @brief 获取文字的Unicode编码值数组。
   *
   * @return 文字的Unicode编码值数组。
   */
  foxit::Int32Array GetCharCode() const;

  /**
   * @brief 获取文字位置（左下点）：相对于图元对象boundary起始点的x坐标，单位毫米。
   *
   * @return 文字位置（左下点）：相对于图元对象boundary起始点的x坐标，单位毫米。
   */
  float GetOriginX() const;

  /**
   * @brief 获取文字位置（左下点）：相对于图元对象boundary起始点的y坐标，单位毫米。
   *
   * @return 文字位置（左下点）：相对于图元对象boundary起始点的y坐标，单位毫米。
   */
  float GetOriginY() const;

  /**
   * @brief 获取代表后一个文字与前一个文字之间在X方向的偏移值数组，单位毫米。
   *
   * @return 代表后一个文字与前一个文字之间在X方向的偏移值数组，单位毫米。
   */
  foxit::FloatArray GetDeltaX() const;

  /**
   * @brief 获取代表后一个文字与前一个文字之间在Y方向的偏移值数组，单位毫米。
   *
   * @return 代表后一个文字与前一个文字之间在Y方向的偏移值数组，单位毫米。
   */
  foxit::FloatArray GetDeltaY() const;

  /**
   * @brief 设置文字长度。
   *
   * @param[in] len  文字长度。
   *
   * @return 无。
   */
  void SetLength(int len);

  /**
   * @brief 设置文字的Unicode编码值数组。
   *
   * @details 输入的数组长度必须与通过函数 @link foxit::ofd::TextPieceInfo::SetLength @endlink 设置的文字长度一致。
   *
   * @param[in] array  文字的Unicode编码值数组。
   *
   * @return 无。
   */
  void SetCharCode(const foxit::Int32Array& array);

  /**
   * @brief 设置文字位置（左下点）。
   *
   * @param[in] x  文字位置（左下点）：相对于图元对象boundary起始点的x坐标，单位毫米。
   * @param[in] y  文字位置（左下点）：相对于图元对象boundary起始点的y坐标，单位毫米。
   *
   * @return 无。
   */
  void SetOriginPostion(float x, float y);

  /**
   * @brief 设置代表后一个文字与前一个文字之间在X方向的偏移值数组，单位毫米。
   *
   * @details 输入的数组长度必须为通过函数 @link foxit::ofd::TextPieceInfo::SetLength @endlink 设置的文字长度减一。
   *
   * @param[in] array  代表后一个文字与前一个文字之间在X方向的偏移值数组，单位毫米。
   *
   * @return 无。
   */
  void SetDeltaX(const foxit::FloatArray& array);

  /**
   * @brief 设置代表后一个文字与前一个文字之间在Y方向的偏移值数组，单位毫米。
   *
   * @details 输入的数组长度必须为通过函数 @link foxit::ofd::TextPieceInfo::SetLength @endlink 设置的文字长度减一。
   *
   * @param[in] array  代表后一个文字与前一个文字之间在Y方向的偏移值数组，单位毫米。
   *
   * @return 无。
   */
  void SetDeltaY(const foxit::FloatArray& array);

 private:
  /**
   * @brief 文字的UNICODE编码值数组。
   */
  foxit::Int32Array       char_code_array;

  /**
   * @brief 文字位置（左下点）：相对于图元对象boundary起始点的x坐标，单位毫米。
   */
  float                   origin_x;

  /**
   * @brief 文字位置（左下点）：相对于图元对象boundary起始点的y坐标，单位毫米。
   */
  float                   origin_y;

  /**
   * @brief 代表后一个文字与前一个文字之间在X方向的偏移值数组，单位毫米。
   */

  foxit::FloatArray       delta_x_array;

  /**
   * @brief 代表后一个文字与前一个文字之间在Y方向的偏移值数组，单位毫米。
   */
  foxit::FloatArray       delta_y_array;
};

}  // namespace ofd
}  // namespace foxit

#endif  // FS_OFD_TEXTPIECEINFO_H_
