/****************************************************************************
                Sync Information List
                -----------------------------------------
    begin      : 2014/09/02
    copyright  : (C) 2005 Solbox Inc.
    author     : Storage Dev Team	                
    email      : storage.sd@solbox.com
    version    : 3.4

    CopyRight(C) 2005 Solbox Inc. All Rights reserved.
    Redistribution and use in source and binary forms, with or with out
    modification, are not permitted in outside of Solbox Inc.
*****************************************************************************/

#ifndef __SYNC_LIST_H__
#define __SYNC_LIST_H__

#include <string>
#include <list>
#include <ostream>
#include <sstream>

#include "RcSyncdRequestData.h"

using namespace std;

// CSyncList 는 내부 다른 모듈에서 사용할 sync info 를 Item 으로 가지는 리스트임
// Item 구성은 요청 받은 (RcSyncdRequestData.h 참조) 데이터로 sync info를 생성하여 
// 리스트 구성한다

// CSyncInfo class
class CSyncInfo 
{
public:
	CSyncInfo();
	~CSyncInfo();

public:
	// 생성된 파일 삭제 처리
	void UnlinkFile();
	
	// 대소문자 구문 여부(master/slave 동일 설정이라고 가정함)
	string		uri_ignore_case;
	// sync 대상 정보
	string		sync_master;
	string		sync_slave;
	string		sync_rcts;
	
	// 동기화 방식 및 추출 대상
	SYNC_TYPE::SYNC_TYPE   sync_type;
	
	// 동기화 구간
	string      start_time;
	string      end_time;

	// 사용할 파일명
	// // Full 경로 포함. (실제 파일 존재 여부는 확인 필요)
	string		file_master_name; // master source file name;
	string		file_slave_name;  // slave source file name(slave mode 요청도 사용)
	string		file_diff_name;	  // diff file name
	string		file_sync_name;   // sync filen(sync mode 요청도 사용 )
};

// CSyncInfo class
class CSyncList
{
public:
	CSyncList();
	~CSyncList();

	bool CreateList(CReqMasterData & d);
	bool CreateList(CReqSlaveData & d);
	bool CreateList(CReqSyncData & d);

	CSyncInfo Pop();
	
	inline bool Empty() { return m_list.empty(); }
	inline CSyncInfo & GetFirst() { return m_list.front(); }
	inline CSyncInfo & GetLast() { return m_list.back(); }

	inline list<CSyncInfo>& GetList() { return m_list; }

private:
	void GenFileName(CSyncInfo & i);

	bool CreateList(const CReqServiceData * d, CSyncInfo & i);
private:
	list<CSyncInfo> m_list;
};

#endif /* ___SYNC_LIST_H__*/
