#ifndef FS_OFD_OPTIMIZE_H_
#define FS_OFD_OPTIMIZE_H_

#include "common/fs_common.h"

/**
 * @brief Foxit 命名空间。
 *
 * @details Foxit PDF SDK 的所有定义和类都在此命名空间内定义。
 */
namespace foxit {
/**
 * @brief ofd 命名空间。
 */
namespace ofd {
/** 此类表示和OFD优化相关的操作。*/
class Optimize FS_FINAL : public CFX_Object {
 public:
  /**
   * @brief OFD高压缩编码类型定义枚举类型。
   *
   * @details 该枚举值应单独使用。
   */
  typedef enum _CompressCodecType {
    /** @brief 编码类型：jpg2000。 */
    e_CompressCodecTypeJPEG2000   =  0,
    /** @brief 编码类型：jpg。 */
    e_CompressCodecTypeJPEG  =  1
  } CompressCodecType;
  

  /**
   * @brief 优化OFD文件。
   *
   * @param[in] input_ofd_path  输入的OFD文件路径。
   * @param[in] output_ofd_path 输出的优化后OFD文件路径。
   *
   * @return <b>true</b> 表示优化成功，<b>false</b> 表示优化失败。
   */
  static bool OfdOptimize(const String& input_ofd_path, const String& output_ofd_path);

  /**
   * @brief 优化OFD文件。
   *
   * @param[in] input_ofd_path  输入的OFD文件路径。
   * @param[in] output_ofd_path 输出的优化后OFD文件路径。
   *
   * @return <b>true</b> 表示优化成功，<b>false</b> 表示优化失败。
   */
  static bool OfdOptimize(const WString& input_ofd_path, const WString& output_ofd_path);

  /**
   * @brief 高压缩OFD文件。
   *
   * @param[in] input_ofd_path    输入的OFD文件路径。
   * @param[in] output_ofd_path   输出的高压缩后OFD文件路径。
   * @param[in] downsample        图像降采样比例。取值范围为0.0-1.0。
   * @param[in] boot_downsample   引导图像降采样比例。取值范围为0.0-1.0。
   * @param[in] compress_level    压缩等级。取值范围为0-9。
   * @param[in] codec_type        压缩编码类型。请参考从 @link foxit::ofd::Optimize::e_CompressCodecTypeJPEG2000 @endlink 开始的值，
   *                              这应该是这些值中的一个。
   * @param[in] float_bit         浮点数精度位数。取值范围为1-8。
   * @param[in] res_optimizer     是否进行资源优化。<b>true</b>表示进行资源优化，<b>false</b>表示不进行资源优化。默认值为true。
   * @param[in] lzma_compress     是否进行LZMA压缩。<b>true</b>表示进行LZMA压缩，<b>false</b>表示不进行LZMA压缩。默认值为true。
   *
   * @return <b>true</b> 表示高压缩成功，<b>false</b> 表示高压缩失败。
   */
  static bool OfdCompress(const String& input_ofd_path, const String& output_ofd_path, float downsample, float boot_downsample,
    int compress_level, CompressCodecType codec_type, int float_bit, bool res_optimizer, bool lzma_compress);

  /**
   * @brief 高压缩OFD文件。
   *
   * @param[in] input_ofd_path    输入的OFD文件路径。
   * @param[in] output_ofd_path   输出的高压缩后OFD文件路径。
   * @param[in] downsample        图像降采样比例。取值范围为0.0-1.0。
   * @param[in] boot_downsample   引导图像降采样比例。取值范围为0.0-1.0。
   * @param[in] compress_level    压缩等级。取值范围为0-9。
   * @param[in] codec_type        压缩编码类型。请参考从 @link foxit::ofd::Optimize::e_CompressCodecTypeJPEG2000 @endlink 开始的值，
   *                              这应该是这些值中的一个。
   * @param[in] float_bit         浮点数精度位数。取值范围为1-8。
   * @param[in] res_optimizer     是否进行资源优化。<b>true</b>表示进行资源优化，<b>false</b>表示不进行资源优化。默认值为true。
   * @param[in] lzma_compress     是否进行LZMA压缩。<b>true</b>表示进行LZMA压缩，<b>false</b>表示不进行LZMA压缩。默认值为true。
   *
   * @return <b>true</b> 表示高压缩成功，<b>false</b> 表示高压缩失败。
   */
  static bool OfdCompress(const WString& input_ofd_path, const WString& output_ofd_path, float downsample, float boot_downsample,
    int compress_level, CompressCodecType codec_type, int float_bit, bool res_optimizer, bool lzma_compress);
};

}  // namespace ofd
}  // namespace foxit

#endif  // _BUILD_OFDSDK_
