#include "stdafx.h"
#include "BookFilter.h"
#include <algorithm>

CBookFilter::CBookFilter(ListBookInfo m_booklists)
{
	m_BookList =m_booklists;
	m_nGradeIndex =-1;
	m_nTermIndex =-1;
	m_resource_note=0;
}


CBookFilter::~CBookFilter(void)
{
}
int SplitString(LPCTSTR lpszStr, LPCTSTR lpszSplit, CStringArray& rArrString, BOOL bAllowNullString)   
{   
	rArrString.RemoveAll();   
	CString szStr = lpszStr;   
	szStr.TrimLeft();   
	szStr.TrimRight();   
	if(szStr.GetLength()==0)   
	{   
		return 0;   
	}   
	CString szSplit = lpszSplit;   
	if(szSplit.GetLength() == 0)   
	{   
		rArrString.Add(szStr);   
		return 1;   
	}   
	CString s;   
	int n;   
	do {   
		n = szStr.Find(szSplit);   
		if(n > 0)   
		{   
			rArrString.Add(szStr.Left(n));   
			szStr = szStr.Right(szStr.GetLength()-n-szSplit.GetLength());   
			szStr.TrimLeft();   
		}   
		else if(n==0)   
		{   
			if(bAllowNullString)   
				rArrString.Add(_T(""));   
			szStr = szStr.Right(szStr.GetLength()-szSplit.GetLength());   
			szStr.TrimLeft();   
		}   
		else  
		{   
			if((szStr.GetLength()>0)||bAllowNullString)   
				rArrString.Add(szStr);   
			break;   
		}   
	} while(1);   
	return rArrString.GetSize();   
}
bool CBookFilter::ComparPdfInfoByUpdateTime(History_Book_Filter_Grade lhs,History_Book_Filter_Grade rhs)
{
	int n = (rhs).strGradeID.Compare((lhs).strGradeID);
	if(n <= 0)
		return false;
	else
		return true;
};
void CBookFilter::AddHistoryBookCondition()
{
	if(m_BookList.size()==0)//û��
	{
		return;
	}

	//Make Vector

	for(int nNum =0;nNum<m_BookList.size();nNum++)
	{

		CBookInfo BookInfo =m_BookList.at(nNum); //�鼮ѶϢ
		//����Grade 

		CString szSplit = _T(",");
		CStringArray szList;
		int Count = ::SplitString(BookInfo.strGrade, szSplit, szList, FALSE);
		// 			 std::vector<CString> strGrade;
		// 
		// 			BookInfo.strGrade;//(01,03)
		//�ж�Grade�Ƿ����
		for(int nNum1=0;nNum1<Count;nNum1++)
		{
			if(m_Condition.size() ==0)
			{
				if(BookInfo.bookId!="")
				{
					//ֱ������
					//�������趨ѧ��Flag
					History_Book_Filter_Grade GradeTemp;
					GradeTemp.bTerm_one =FALSE;
					GradeTemp.bTerm_Two =FALSE;
					GradeTemp.strGrade =Book_Grade_Name[_ttoi(szList[nNum1])];
					GradeTemp.strGradeID =szList[nNum1];
					CString szSplit = _T(",");
					CStringArray szList;
					int Count = ::SplitString(BookInfo.applicableTerm, szSplit, szList, FALSE);
					for(int nNum3=0;nNum3<Count;nNum3++)
					{
						int nTerm=_ttoi(szList[nNum1]);
						GradeTemp.strTerm_one =Book_Term_Name[1];
						GradeTemp.strTerm_Two =Book_Term_Name[2];
						switch (nTerm)
						{
						case 1:
							//GradeTemp.strTerm_one =Book_Term_Name[_ttoi(szList[nNum3])];
							GradeTemp.bTerm_one =TRUE;
							break;
						case 2:
							//GradeTemp.strTerm_Two =Book_Term_Name[_ttoi(szList[nNum3])];
							GradeTemp.bTerm_Two =TRUE;
							break;
						}
					}
					m_Condition.push_back(GradeTemp);
					continue;
				}else
				{
					continue;
				}

			}
			if(BookInfo.bookId=="")
			{
				continue;
			}
// 			for(int nNum2=0;nNum2<m_Condition.size();nNum2++)
// 			{
				BOOL bExist=FALSE;
				History_Book_Filter_Grade Condition;
				for(int nDetect=0;nDetect<m_Condition.size();nDetect++)
				{
					 Condition=m_Condition.at(nDetect);
					if(Book_Grade_Name[_ttoi(szList[nNum1])] ==Condition.strGrade)
					{
						bExist =TRUE;
						break;
					}
				}
				
				
				if(bExist)//�Ѵ��ڣ��趨ѧ����Ϣ
				{
					CString szSplit = _T(",");
					CStringArray szList;
					int Count = ::SplitString(BookInfo.applicableTerm, szSplit, szList, FALSE);
					for(int nNum3=0;nNum3<Count;nNum3++)
					{
						int nTerm=_ttoi(szList[nNum1]);
						switch (nTerm)
						{
						case 1:
							Condition.strTerm_one =Book_Term_Name[_ttoi(szList[nNum3])];
							Condition.bTerm_one =TRUE;
							break;
						case 2:
							Condition.strTerm_Two =Book_Term_Name[_ttoi(szList[nNum3])];
							Condition.bTerm_Two =TRUE;
							break;
						}
					}

				}else
				{
					//�������趨ѧ��Flag
					History_Book_Filter_Grade GradeTemp;
					GradeTemp.bTerm_one =FALSE;
					GradeTemp.bTerm_Two =FALSE;
					GradeTemp.strGrade =Book_Grade_Name[_ttoi(szList[nNum1])];
					GradeTemp.strGradeID =szList[nNum1];
					CString szSplit = _T(",");
					CStringArray szList;
					int Count = ::SplitString(BookInfo.applicableTerm, szSplit, szList, FALSE);
					for(int nNum3=0;nNum3<Count;nNum3++)
					{
						int nTerm=_ttoi(szList[nNum1]);
						switch (nTerm)
						{
						case 1:
							GradeTemp.strTerm_one =Book_Term_Name[_ttoi(szList[nNum3])];
							GradeTemp.bTerm_one =TRUE;
							break;
						case 2:
							GradeTemp.strTerm_Two =Book_Term_Name[_ttoi(szList[nNum3])];
							GradeTemp.bTerm_Two =TRUE;
							break;
						}
					}
					m_Condition.push_back(GradeTemp);
				}
			//}


		}
	}
	sort(m_Condition.begin(), m_Condition.end(), ComparPdfInfoByUpdateTime);
}

void CBookFilter::HistoryBookCondition(int nGradeIndex,int nTerm)
{
	m_ConditionList.clear();
	m_nGradeIndex =nGradeIndex;
	m_nTermIndex =nTerm;
	if(nGradeIndex ==-1&&nTerm ==-1 && m_resource_note==0)
	{
		//ȫ����ʾ 
		m_ConditionList =m_BookList;
	}else
	{
		
		for(int nNum=0;nNum<m_BookList.size();nNum++)
		{
			CBookInfo BookInfo =m_BookList.at(nNum); //�鼮ѶϢ
			if(nGradeIndex==-1)
			{
				//�ж�ѧ������
				int nResult=-1;
				if(nTerm==0)
				{
					nResult =BookInfo.applicableTerm.Find(L"01");

				}else if(nTerm==1)//�ڶ�ѧ��
				{
					nResult =BookInfo.applicableTerm.Find(L"02");

				}else if(nTerm==-1)
				{
					nResult =1;
				}
				if(nResult !=-1)
				{
					if(m_resource_note==1)
					{
						if(BookInfo.nNoteNum>0)
							m_ConditionList.push_back(BookInfo);
					}
					else if(m_resource_note==2)
					{
						if(BookInfo.resCount>0)
							m_ConditionList.push_back(BookInfo);
					}
					else
						m_ConditionList.push_back(BookInfo);
				}

			}else
			{
				History_Book_Filter_Grade DataTemp = m_Condition.at(nGradeIndex);
				int nResult =BookInfo.strGrade.Find(DataTemp.strGradeID);
				if(nResult!=-1)//�����������鼮
				{
					//�ж�ѧ������
					int nResult=-1;
					if(nTerm==0)
					{
						nResult =BookInfo.applicableTerm.Find(L"01");

					}else if(nTerm==1)//�ڶ�ѧ��
					{
						nResult =BookInfo.applicableTerm.Find(L"02");

					}else if(nTerm==-1)
					{
						nResult =1;
					}
					if(nResult !=-1)
					{
						if(m_resource_note==1)
						{
							if(BookInfo.nNoteNum>0)
								m_ConditionList.push_back(BookInfo);
						}
						else if(m_resource_note==2)
						{
							if(BookInfo.resCount>0)
								m_ConditionList.push_back(BookInfo);
						}
						else
							m_ConditionList.push_back(BookInfo);
					}

				}

			}
		}

	}
}
void CBookFilter::SetList( ListBookInfo list )
{
	m_BookList.clear();
	m_BookList = list;
}
// int CBookFilter::GetGradeIndex(CString strGradeName)
// {
// 	int nInex=-1;
// 	for(int nNum=0;nNum<m_Condition.size();nNum++)
// 	{
// 		if(strGradeName==Book_Grade_Name[nNum])
// 		{
// 			nInex =nNum+1;
// 			break;
// 		}
// 	}
// 	return nInex;
// }