#include "ECU.hpp"
#include "MyStringUtils.h"
#include <mutex>

namespace otx {
	namespace flash {

		static std::mutex mLock;

		ECU::ECU() {
			this->mPriority = 0;
			this->mTotalSize = 0;
			this->mDownloadedSize = 0;
		}
		std::string ECU::getName() {
			return this->mName;
		}
		void ECU::setName(const std::string& name) {
			this->mName = name;
		}
		std::string ECU::getId() {
			return this->mId;
		}
		void ECU::setId(const std::string& id) {
			this->mId = id;
		}
		std::string ECU::getDbLogicalLinkName() {
			return this->mDbLogicalLinkName;
		}
		void ECU::setDbLogicalLinkName(const std::string& v) {
			this->mDbLogicalLinkName = v;
		}

		void ECU::addFile(File& file) {
			this->mFiles.push_back(file);
			this->mTotalSize += file.getSize();
		}
		std::vector<File>* ECU::getFiles() {
			return &this->mFiles;
		}

		void ECU::addCmd(std::string& cmd)
		{
			std::lock_guard<std::mutex> lock(mLock);
			m_vecCmd.push_back(cmd);
		}

		std::vector<std::string>* ECU::getCmd()
		{
			std::lock_guard<std::mutex> lock(mLock);
			return &this->m_vecCmd;
		}

		void ECU::clearCmd()
		{
			std::lock_guard<std::mutex> lock(mLock);
			this->m_vecCmd.clear();
		}

		void ECU::setPriority(int v) {
			this->mPriority = v;
		}
		int ECU::getPriority() {
			return this->mPriority;
		}

		void ECU::setSecurityAccessMode(int securityAccessMode)
		{
			this->mSecurityAccessMode = securityAccessMode;
		}

		int ECU::getSecurityAccessMode()
		{
			return this->mSecurityAccessMode;
		}

		void ECU::setSecurityAccess(int securityAccess)
		{
			this->securityAccess = securityAccess;
		}

		int ECU::getSecurityAccess()
		{
			return this->securityAccess;
		}

		void ECU::setSignatureMode(int signatureMode)
		{
			this->signatureMode = signatureMode;
		}

		int ECU::getSignatureMode()
		{
			return this->signatureMode;
		}

		void ECU::setInstallVerify(int installVerify)
		{
			this->installVerify = installVerify;
		}

		int ECU::getInstallVerify()
		{
			return this->installVerify;
		}

		void ECU::setActiveSBLAddress(std::string activeSBLAddress)
		{
			this->activeSBLAddress = activeSBLAddress;
		}

		std::string ECU::getActiveSBLAddress()
		{
			return this->activeSBLAddress;
		}

		size_t ECU::getTotalSize() {
			return this->mTotalSize;
		}


		void ECU::setTotalSize(size_t size) {
			if(size > 0 )
			 mTotalSize = size;
		}

		size_t ECU::getDownloadedSize() {
			return this->mDownloadedSize;
		}


		void ECU::setDownloadedSize(size_t size) {
			if (size > 0)
				mDownloadedSize = size;
		}

	} // namespace flash
} // namespace otx