#ifndef CONFIGURATION_PACKETS_H_
#define CONFIGURATION_PACKETS_H_
#include <array>
#include <map>
#include <memory>
#include <unordered_map>

#include "ecc.h"
#include "header.h"

class ConfigurationPackets {
       public:
	ConfigurationPackets(const std::string& arch);
	static const std::unordered_map<std::string, size_t>
	    words_in_architecture;
	static std::shared_ptr<ConfigurationPackets> InitFromFile(
	    const std::string& file,
	    const std::string& arch);
	void AddAuxData(const std::string& file);
	void WriteBits(std::ostream& out);
	void SetBits(std::ifstream& ifs);

       private:
	using ConfigurationFrame = std::pair<uint32_t, std::vector<uint32_t>>;
	using ConfigurationFrames = std::map<uint32_t, std::vector<uint32_t>>;
	// Refer to UG470 page 109 for address of configuration registers and commands
	const uint32_t kCmdWrite = 0x30008000;
	const uint32_t kFdriWrite = 0x30004000;
	const uint32_t kFarWrite = 0x30002000;
	const uint32_t kCrcWrite = 0x30000000;
	const uint32_t kNop = 0x20000000;
	const uint32_t kFarReg = 0x1;
	const uint32_t kFdriReg = 0x2;
	const uint32_t kCmdReg = 0x4;
	const uint32_t kWcfgCmd = 0x1;
	// Writing the RCRC(0x7) command in type 1 packet with 1 word to the CMD register (0x30008001)
	const std::array<uint32_t, 2> kRCrcCmd = {{0x30008001, 0x7}};
	size_t words_per_frame_;
	std::string architecture_;
	ConfigurationFrames configuration_data_packets_;
	std::vector<uint32_t> fpga_configuration_head_;
	std::vector<uint32_t> fpga_configuration_tail_;
	std::unique_ptr<Header> header_;
	ECC ecc_;

	void InitializeConfigurationData(const std::string& line);
	void InitializeFpgaConfigurationHead(const std::string& line);
	void InitializeFpgaConfigurationTail(const std::string& line);
	void InitializeHeader(const std::string& line);
	uint32_t GetCRC(ConfigurationFrames::const_iterator frame_citr,
	                bool is_new_row = false) const;
	uint32_t GetFpgaConfigurationCRC() const;
	void UpdateECCs();
	void SetBit(const std::string& line);
	void WriteConfiguration(std::ostream& out);
	void WriteFpgaConfiguration(std::ostream& out,
	                            const std::vector<uint32_t>& vect);
	void WritePacket(std::ostream& out,
	                 ConfigurationFrames::const_iterator frame_citr) const;
	bool IsDifferentRow(
	    ConfigurationFrames::const_iterator frame_citr1,
	    ConfigurationFrames::const_iterator frame_citr2) const;
	void Line2Vector(const std::string& line, std::vector<uint32_t>& vect);
};
#endif  // CONFIGURATION_PACKETS_H_
