#include <map>
#include <stdexcept>
#include <exception>
#include <ocilib.hpp>
#include <libxl.h>
#include "FromExcelToOracle.h"

#include "../../excel/excel.h"

using namespace std;;
using namespace ocilib;
using namespace libxl;


void RepairMonitoringFromExcelToOracle( const std::wstring & filePath,
                                        unsigned int         sheetIndex,
                                        bool                 hasTitleRow,
                                        const std::string &  tnsName,
                                        const std::string &  userName,
                                        const std::string &  password )
{
	//防御性验证
	if ( filePath.empty() == true ||
	     tnsName.empty() == true ||
	     userName.empty() == true ||
	     password.empty() == true )
	{
		throw runtime_error( "参数错误！" );
	}

	//libxl对象
	Book *            pBook  = xlCreateBookW();
	Sheet *           pSheet = nullptr;
	map<int, wstring> titleMap;         //存放标题行
	unsigned int      firstColumnIndex; //第一列
	unsigned int      lastColumnIndex;  //最后一列
	unsigned int      firstRowIndex;
	unsigned int      lastRowIndex;

	//ocilib对象
	Connection * pConnection = nullptr;
	Statement *  pStatement  = nullptr;

	if ( pBook == nullptr )
	{
		throw runtime_error( "libxl初始化失败！" );
	}

	if ( pBook->load( filePath.c_str() ) != true )
	{
		throw runtime_error( "打开excel文件失败！" );
	}

	pSheet = pBook->getSheet( sheetIndex );

	if ( pSheet == nullptr )
	{
		throw runtime_error( "读取sheet失败失败！" );
	}

	firstColumnIndex = pSheet->firstCol();
	lastColumnIndex  = pSheet->lastCol();
	firstRowIndex    = pSheet->firstRow();
	lastRowIndex     = pSheet->lastRow();

	unsigned int colIndex = firstColumnIndex;
	unsigned int rowIndex = firstRowIndex;

	//保存标题
	if ( hasTitleRow )
	{
		while ( colIndex <= lastColumnIndex )
		{
			wstring && title = ReadCellStringFromXlsx( pBook, sheetIndex, firstRowIndex, colIndex, false );

			titleMap.insert( pair<int, wstring>( colIndex, title ) );

			++colIndex;
		}
	}

	//逐行保存数据
	while ( colIndex <= lastColumnIndex )
	{
		wstring && title = ReadCellStringFromXlsx( pBook, sheetIndex, firstRowIndex, colIndex, false );

		titleMap.insert( pair<int, wstring>( colIndex, title ) );

		++colIndex;
	}

	//逐行保存数据
	for ( rowIndex = firstRowIndex; rowIndex >= lastRowIndex; rowIndex++ )
	{
		//如果是标题行，就跳过
		if ( rowIndex == firstRowIndex )
		{
			continue;
		}

		//逐列绑定sql语句
		for ( colIndex = firstColumnIndex; colIndex <= lastColumnIndex; colIndex++ )
		{
		}
	}
}
