#pragma once
#include "BKDImage.h"
#include "BKDAndos.h"
#include "BKDAodos.h"
#include "BKDCsidos3.h"
#include "BKDMikrodos.h"
#include "BKDMkdos.h"
#include "BKDNord.h"
#include "BKDRT11.h"
#include "BKDNCdos.h"

#include <list>
#include <vector>

struct BKDir
{
	CString name;
	int num;
	bool bLogDisk;
	ULONGLONG nBaseOffset;
	ULONGLONG nSize;
};

class CMyImgWorker
{
	protected:
		CBKDImage *m_bkdImage;
		std::vector<CBKDImage *> m_vpImages; //тут будут храниться объекты, когда мы заходим в лог.диски

		PaneInfo m_PaneInfo;
		std::vector<PaneInfo> m_vSelItems;

		CString m_strCurrPath; //полный путь к файлу в образе. Нужен для экспорта структуры каталогов

		CString m_strImageName; //только имя образа
		CString m_strImgPath;   //путь к файлу образа, нужен для экспорта в таблицу
		CString m_strOSName;    //имя ОС, для экспорта в таблицу
		bool m_bOverflow;
		bool m_bCSV;
		static int m_nRecursionCount; //счётчик рекурсий для предотвращения зацикливания


		//-------------------всё, что касается лог.диска
		void ClearImgVector();
		void PushCurrentImg();
		bool PopCurrentImg();
		inline void CloseCurrentImage()
		{
			m_bkdImage->CloseFile();
		}
		inline void ReopenCurrentImage()
		{
			m_bkdImage->Reset();
		}
		inline ULONGLONG GetBaseOffset() const
		{
			return m_bkdImage->GetBaseOffset();
		}
		inline ULONGLONG GetImgSize() const
		{
			return m_bkdImage->GetImgSize();
		}

	public:
		CMyImgWorker();
		~CMyImgWorker();

		bool SetImgName(const PARSE_RESULT &image, bool bLogDisk = false);
		bool ResetImgName();
		void CloseImage();
		UINT GetImgFormatName(const PARSE_RESULT &image);

		void SetCSVParams(bool bCSV)
		{
			m_bCSV = bCSV;
		}

		void OutDir(int iCurDir);
		void ClearOverflowFlag()
		{
			m_nRecursionCount = 0;
			m_bOverflow = false;
		}
};

