#pragma once

#include "resource.h"

#include "BKParseImage.h"
#include "BKFloppyImage_Prototype.h"
#include <regex>

struct CSV_Fields
{
	fs::path		strImagePath;	// текущая директория с путём, в которой ищются образы
	fs::path		strImageName;	// имя файла текущего образа
	fs::path		strInImgPath;
	fs::path		strInImgName;
	std::wstring	strOSType;
	std::wstring	strAttr;
	int				nBlkSize;
	int				nAddr;
	int				nSize;
	bool			bBootable;
	bool			bLogDisk;
};

namespace BKDL
{
	PaneInfo                m_PaneInfo;
	std::vector<PaneInfo>   m_vSelItems;

	std::unique_ptr<CBKFloppyImage_Prototype> m_pFloppyImage;
	std::vector<std::unique_ptr<CBKFloppyImage_Prototype>> m_vpImages; // тут будут храниться объекты, когда мы заходим в лог.диски
	CSV_Fields				m_sCSVFields;

	std::wstring			m_strIndent;		// отступы слева для формирования стуктуры вложенностей
	std::vector <std::wstring> m_vExtractPath;	// абсолютный путь для извлечения файлов.

	bool		ScanDir(const fs::path &strInPath);
	void		OutProgress(const fs::path &strPath);
	void		Usage();

	bool		OutDir();

	bool		Open(const PARSE_RESULT &pr, const bool bLogDisk = false); // открыть файл по результатам парсинга
	bool		isOpened(); // переинициализация уже открытого образа
	void		Close(); // закрыть текущий файл
	const std::wstring GetImgFormatName(IMAGE_TYPE nType = IMAGE_TYPE::UNKNOWN);
	void		ClearAllImgData();
	void		PushCurrentImg();
	bool		PopCurrentImg();

	using RegMasksVector_t = std::vector<std::wregex>;

	RegMasksVector_t TransformMask(const std::wstring &str);
	bool ExtractFile(BKDirDataItem *fr, const std::wstring &strAttr);
}

