#include "CDPropertyEntranceComponentTable.h"

CDPropertyEntranceComponentTable::CDPropertyEntranceComponentTable() {

	// First, get the size of the table
	size_t size = 0;
	auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM PropertyEntranceComponent");
	while (!tableSize.eof()) {
		size = tableSize.getIntField(0, 0);
		tableSize.nextRow();
	}

	tableSize.finalize();

	this->entries.reserve(size);

	auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM PropertyEntranceComponent;");
	while (!tableData.eof()) {
		auto entry = CDPropertyEntranceComponent{
			static_cast<uint32_t>(tableData.getIntField(0, -1)),
			static_cast<uint32_t>(tableData.getIntField(1, -1)),
			tableData.getStringField(2, ""),
			static_cast<bool>(tableData.getIntField(3, false)),
			tableData.getStringField(4, "")
		};

		this->entries.push_back(entry);
		tableData.nextRow();
	}

	tableData.finalize();
}

CDPropertyEntranceComponentTable::~CDPropertyEntranceComponentTable(void) = default;

std::string CDPropertyEntranceComponentTable::GetName() const {
	return "PropertyEntranceComponent";
}

CDPropertyEntranceComponent CDPropertyEntranceComponentTable::GetByID(uint32_t id) {
	for (const auto& entry : entries) {
		if (entry.id == id)
			return entry;
	}

	return defaultEntry;
}