#pragma once

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

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

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 &pathPath);
	void        OutProgress(const fs::path &pathPath);
	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);
}

