#ifndef FS_OFD_VIDEOOBJECT_H_
#define FS_OFD_VIDEOOBJECT_H_

#include "common/fs_common.h"
#include "fs_ofdgraphicsobject.h"

/**
 * @brief Foxit 命名空间。
 *
 * @details Foxit PDF SDK 的所有定义和类都在此命名空间内定义。
 */
namespace foxit {
/**
 * @brief ofd 命名空间。
 */
namespace ofd {
/**
 * @brief ofd graphics 命名空间。
 */
namespace graphics {
/** 此类表示和OFD视频对象相关的方法。*/
class OFDVideoObject FS_FINAL : public OFDGraphicsObject {
 public:
  /**
   * @brief  构造函数，从现有@link foxit::ofd::graphics::OFDGraphicsObject @endlink对象。
   * @param[in] object OFDGraphicsObject对象。
                       此对象必须是一个有效的对象，并且其类型必须是@link foxit::ofd::graphics::OFDGraphicsObject::e_ObjectTypeVideo @endlink，否则构造函数将抛出异常。
   */
  explicit OFDVideoObject(OFDGraphicsObject object);

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

  /**
   * @brief 构造函数，通过另一个OFD视频对象。
   *
   * @param[in] other  另一个OFD视频对象。
   */
  OFDVideoObject(const OFDVideoObject& other);

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

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

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

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

  /**
   * @brief 获取Video对象中数据。
   *
   * @return 对象中数据。
   */
  String GetVideoData();

  /**
   * @brief 获取Video资源ID。
   *
   * @return 资源ID。
   */
  foxit::uint32 GetResourceID();

  /**
   * @brief 获取Video对象类型。
   *
   * @return 对象类型。
   */
  String GetVideoType();

  /**
   * @brief 获取Video对象格式。
   *
   * @return 对象格式。
   */
  String GetFormat();

  /**
   * @brief 获取Video对象标题。
   *
   * @return 对象标题。
   */
  String GetTitle();

  /**
   * @brief 判断Video对象是否有边框。
   *
   * @return 是否有边框。
   */
  bool HasBorder();

  /**
   * @brief 获取Video边框线宽。
   *
   * @return 边框线宽。
   */
  float GetBorderLineWidth();

  /**
   * @brief 获取Video对象边框线条虚线样式开始的位置。
   *
   * @return 图元对象虚线重复起始值。
   */
  float GetBorderDashOffset();

  /**
   * @brief 获取Video对象边框虚线重复样式。数组中共含两个值，第一个值代表虚线线段的长度，第二个值代表虚线间隔的长度。
   *
   * @return 虚线重复样式数组。
   */
  foxit::FloatArray GetBorderDashPattern();

  /**
   * @brief 获取Video边框横向圆角半径。
   *
   * @return 横向圆角半径。
   */
  float GetBorderHCornerRadius();

  /**
   * @brief 获取Video边框纵向圆角半径。
   *
   * @return 纵向圆角半径。
   */
  float GetBorderVCornerRadius();

  /**
   * @brief 获取Video边框颜色。
   *
   * @return 边框颜色。RGB格式。
   */
  foxit::RGB GetBorderStrokeColor();

  /**
   * @brief 通过文件设置Video对象中多媒体对像。
   *
   * @param[in] file_name        指定的Video文件名称。
   *
   * @return 无。
   */
  void SetVideoFromFile(const String& file_name);

  /**
   * @brief 设置Video对象类型。
   *
   * @param[in] type              类型。
   *
   * @return 无。
   */
  void SetType(const String& type);

  /**
   * @brief 设置Video对象格式。
   *
   * @param[in] format            格式。
   *
   * @return 无。
   */
  void SetFormat(const String& format);

  /**
   * @brief 设置Video对象标题。
   *
   * @param[in] title             标题。
   *
   * @return 无。
   */
  void SetTitle(const String& title);

  /**
   * @brief 创建Video对象边框。
   *
   * @return 无。
   */
  void CreateBorder();

  /**
   * @brief 设置Video边框线宽。
   *
   * @param[in] line_width        边框线宽。
   *
   * @return 无。
   */
  void SetBorderLineWidth(float line_width);

  /**
   * @brief 设置Video边框横、纵向圆角半径。
   *
   * @param[in] h_radius          指定边框横向圆角半径。
   * @param[in] v_radius          指定边框纵向圆角半径。
   *
   * @return 无。
   */
  void SetBorderCornerRadius(float h_radius, float v_radius);

  /**
   * @brief 设置Video边框颜色。
   *
   * @param[in] color             颜色值。
   *
   * @return 无。
   */
  void SetBorderStrokeColor(foxit::RGB color);

  explicit OFDVideoObject(FS_HANDLE handle);
};

}  // namespace graphics
}  // namespace ofd
}  // namespace foxit

#endif  // FS_OFD_VIDEOOBJECT_H_
