// lib_common_depence.h: 标准系统包含文件的包含文件
// 或项目特定的包含文件。

/************************************************************************/
/* 2021.08.13 上线第一版												*/
/************************************************************************/

#pragma once

#include "public_define.h"
#include "error_api_define.h"

////////////////////////////////// 测试接口 ////////////////////////////////////////

/// 测试输出 win/linux  msvc/g++
dll_export void api_cout_system_compiler();

/// 测试opencv是否有效
dll_export int api_mat_test(std::string strPath);

/// 测试boost 
dll_export int api_boost_test(std::string strCreateDir);

///////////////////////////////// 交互接口  /////////////////////////////////////////

/**
  * @brief: 获取版本号 格式：N.X.Y 1.0.1 2.2.0
  * @param :  
  * @return const char * : string.c_str()  
  * @author : qqm  2021/03/09 14:24
*/
dll_export const char * api_get_version();

/**
  * @brief: 解析json 数据到模板中 方便测试
  * @param type: 见枚举
  * @param path: json path
  * @param qtMap: 全学科逻辑题型与识别题型表
  * @param tpInfos: 接受数据 内部会改变内存 所以不同版本的编译器要注意
  * @param szInfo:	选做题信息组合
  * @param socringMap: 切块和分数框业务表
  * @return int : 0 succ  -1 some error
  * @author : qqm  2021/03/09 14:24
*/
dll_export int api_param_json(CARD_TYPE type, const char * path,std::map<int ,int> &qtMap,
	preinfo::templatesInfo & tpInfos, preinfo::SubjChiInfo &zxInfo, std::map<int, preinfo::SocringArea> &socringMap, std::map<int, preinfo::QtNumInfo> *cutingMap = NULL);

/**
  * @brief: 批次图像处理接口
  * @param strBatchUUID:			本批次的UUID，每个批次号都是唯一的，每个批次号对应一个模板映射，但是每个模板可以对应N个批次号
  * @param strTempSavePath:			临时中间文件存储路径
  * @param vecPtInfo:				批次号对应的模板映射的解析结果，由调用者解析好
  * @param XzInfo;					选做题信息 调用者提供
  * @param vecProcessedImagesList:	待识别图像绝对路径
  * @param iLogLeave:				日志等级 使用默认值就好 主要用来线上问题分析调试
  * @param bCutRect:				是否切图
  * @param type:					参照CARD_TYPE枚举
  * @param data_interaction:		回调函数
  * @param autoParam:				预留参数
  * @return int:					0:succ  -1:
  * @author : qqm  2021/03/05 13:19
*/
dll_export int api_processing_images(
	const char *	strBatchUUID,
	const char *	strTempSavePath,
	const			preinfo::templatesInfo & vecPtInfo,
	const			preinfo::SubjChiInfo & XzInfo,
	const			std::vector<std::string> & vecProcessedImagesList,
	const LOG_LEAVE	iLogLeave /*= LOG_AUTO*/,
	const bool		bCutRect,
	const CARD_TYPE	type,
	int(*data_interaction)(result::spinfo & pinfo,void * param),
	void * param
);


/**
  * @brief: 异常图像再次识别接口1 传入的答题卡 默认与模板同方向 同顺序，算法不需要做分页和方向判断，直接按照模板一致处理即可
  * @param strBatchUUID:			本批次的UUID，每个批次号都是唯一的，每个批次号对应一个模板映射，但是每个模板可以对应N个批次号
  * @param strTempSavePath:			临时中间文件存储路径
  * @param vecPtInfo:				批次号对应的模板映射的解析结果，由调用者解析好
  * @param XzInfo;					选做题信息 调用者提供
  * @param vecProcessedImagesList:	待识别图像绝对路径
  * @param iLogLeave:				日志等级 使用默认值就好 主要用来线上问题分析调试
  * @param bCutRect:				是否切图
  * @param type:					参照CARD_TYPE枚举
  * @param data_interaction:		回调函数
  * @param autoParam:				预留参数
  * @return int:					参见新增异常接口返回值状态码
  * @author : qqm  2022/02/17 
*/
dll_export int api_processing_error_images_self(
	const char *	strBatchUUID,
	const char *	strTempSavePath,
	const			preinfo::templatesInfo & vecPtInfo,
	const			preinfo::SubjChiInfo & XzInfo,
	const			std::vector<std::string> & vecProcessedImagesList,
	const LOG_LEAVE	iLogLeave /*= LOG_AUTO*/,
	const bool		bCutRect,
	const CARD_TYPE	type,
	int(*data_interaction)(result::spinfo & pinfo, void * param),
	void * param
);



/**
  * @brief: 异常图像再次识别接口2   传入模板和答题卡上对应的定位信息序列，手工指定矫正信息
  * @param strBatchUUID:			本批次的UUID，每个批次号都是唯一的，每个批次号对应一个模板映射，但是每个模板可以对应N个批次号
  * @param strTempSavePath:			临时中间文件存储路径
  * @param vecPtInfo:				批次号对应的模板映射的解析结果，由调用者解析好
  * @param XzInfo;					选做题信息 调用者提供
  * @param vecProcessedImagesList:	待识别图像绝对路径
  * @param vecLocationInfoMb:		手工的模板定位信息  不能加const 因为在在线答题卡 需要内部解析定位点
  * @param vecLocationInfoMb:		手工的答题卡定位信息
  * @param iLogLeave:				日志等级 使用默认值就好 主要用来线上问题分析调试
  * @param bCutRect:				是否切图
  * @param type:					参照CARD_TYPE&API_PARAM枚举 !!! 注意本参数 为组合参数 传入的类型应该为 CARD_TYPE | ERROR_CARD  !!!
  * @param resultInfo:				结果交互结构体 返回值=RT_OK
  * @param autoParam:				预留参数
  * @return int:					参见新增异常接口返回值状态码
  * @author : qqm  2022/02/17
*/
dll_export int api_processing_error_images_hand(
	const char *	strBatchUUID,
	const char *	strTempSavePath,
	const			preinfo::templatesInfo & vecPtInfo,
	const			preinfo::SubjChiInfo & XzInfo,
	const			std::vector<std::string> & vecProcessedImagesList,
					std::vector<analysis::LocationResult> & vecLocationInfoMb,
	const			std::vector<analysis::LocationResult> & vecLocationInfoPt,
	const LOG_LEAVE	iLogLeave /*= LOG_AUTO*/,
	const bool		bCutRect,
	const CARD_TYPE	type,
	std::vector<eapi::SingleErrorPaperInfo> & resultInfo, 
	void * param
);