#ifndef FS_OFD_TAGTREENODE_H_
#define FS_OFD_TAGTREENODE_H_

#include "common/fs_common.h"

/**
 * @brief Foxit 命名空间。
 *
 * @details Foxit PDF SDK 的所有定义和类都在此命名空间内定义。
 */
namespace foxit {
/**
* @brief ofd 命名空间。
*/
namespace ofd {
namespace graphics {
class OFDGraphicsObject;
}

/** 此类表示和OFD标签树节点相关的方法。*/
class TagTreeNode FS_FINAL : public Base {
 public:
  /** @brief 析构函数。 */
  ~TagTreeNode();

  /**
   * @brief 构造函数，通过另一个OFD标签树节点对象。
   *
   * @param[in] other  另一个OFD标签树节点对象。
   */
  TagTreeNode(const TagTreeNode& other);

  /**
   * @brief 赋值操作符。
   *
   * @param[in] other  另一个OFD标签树节点对象，其值将被赋给当前对象。
   *
   * @return 当前对象自身的引用。
   */
  TagTreeNode& operator = (const TagTreeNode& other);

  /**
   * @brief 相等操作符。
   *
   * @param[in] other  另一个OFD标签树节点对象。此函数将检查当前对象是否等于这个对象。
   *
   * @return <b>true</b> 表示相等，<b>false</b> 表示不相等。
   */
  bool operator == (const TagTreeNode& other) const;

  /**
   * @brief 不相等操作符。
   *
   * @param[in] other  另一个OFD标签树节点对象。此函数将检查当前对象是否不等于这个对象。
   *
   * @return <b>true</b> 表示不相等，<b>false</b> 表示相等。
   */
  bool operator != (const TagTreeNode& other) const;

  /**
   * @brief 检查当前对象是否为空。
   *
   * @details 当前对象为空时，表示当前对象是无用的。
   *
   * @return <b>true</b> 表示当前对象为空，<b>false</b> 表示不为空。
   */
  bool IsEmpty() const;

  /**
   * @brief 获取子节点数量。
   *
   * @return 子节点数量。
   */
  int GetTagTreeNodeCount();

  /**
   * @brief 获取指定索引的子节点。
   *
   * @param[in] index 子节点索引。有效范围：从0到(<i>count</i>-1)。
   *                  <i>count</i> 由函数 @link TagTreeNode::GetTagTreeNodeCount @endlink 返回。
   *
   * @return 指定索引的子节点。
   */
  TagTreeNode GetTagTreeNode(int index);

  /**
   * @brief 获取节点关键字。
   *
   * @return 节点关键字值。
   */
  String GetKey();

  /**
   * @brief 获取节点文本内容。
   *
   * @return 节点文本内容值。
   */
  String GetText();

  /**
   * @brief 获取图元对象数量。
   *
   * @return 图元对象数量。
   */
  int GetGraphicsObjectCount();

  /**
   * @brief 获取指定索引的图元对象。
   *
   * @param[in] index 图元对象索引。有效范围：从0到(<i>count</i>-1)。
   *                  <i>count</i> 由函数 @link foxit::ofd::TagTreeNode::GetGraphicsObjectCount @endlink 返回。
   *
   * @return 指定索引的图元对象。
   */
  graphics::OFDGraphicsObject GetGraphicsObject(int index);

  explicit TagTreeNode(FS_HANDLE handle);
};

}  // namespace ofd
}  // namespace foxit

#endif  // FS_OFD_TAGTREENODE_H_
