/** @file
 * @author Edouard DUPIN 
 * @copyright 2011, Edouard DUPIN, all right reserved
 * @license APACHE v2.0 (see license file)
 * @fork from RTAudio
 */

//#include <etk/types.h>
#include <audio/orchestra/debug.h>
#include <audio/orchestra/DeviceInfo.h>
#include <etk/stdTools.h>
#include <iostream>

#undef __class__
#define __class__ "DeviceInfo"

void audio::orchestra::DeviceInfo::display(int32_t _tabNumber) const {
	std::string space;
	for (int32_t iii=0; iii<_tabNumber; ++iii) {
		space += "    ";
	}
	if (isCorrect == false) {
		ATA_PRINT(space + "NOT CORRECT INFORAMATIONS");
		return;
	}
	ATA_PRINT(space + "mode=" << (input==true?"input":"output"));
	ATA_PRINT(space + "name=" << name);
	if (desc.size() != 0) {
		ATA_PRINT(space + "desc=" << desc);
	}
	ATA_PRINT(space + "channel" << (channels.size()>1?"s":"") << "=" << channels.size() << " : " << channels);
	ATA_PRINT(space + "rate" << (sampleRates.size()>1?"s":"") << "=" << sampleRates);
	ATA_PRINT(space + "native Format" << (nativeFormats.size()>1?"s":"") << ": " << nativeFormats);
	ATA_PRINT(space + "default=" << (isDefault==true?"true":"false"));
}

void audio::orchestra::DeviceInfo::clear() {
	isCorrect = false;
	input = false;
	name = "";
	desc = "";
	channels.clear();
	sampleRates.clear();
	nativeFormats.clear();
	isDefault = false;
}

std::ostream& audio::orchestra::operator <<(std::ostream& _os, const audio::orchestra::DeviceInfo& _obj) {
	_os << "{";
	if (_obj.isCorrect == false) {
		_os << "NOT CORRECT INFORAMATIONS";
	} else {
		_os << "name=" << _obj.name << ", ";
		if (_obj.desc.size() != 0) {
			_os << "description=" << _obj.desc << ", ";
		}
		_os << "channels=" << _obj.channels << ", ";
		_os << "default=" << _obj.isDefault << ", ";
		_os << "rates=" << _obj.sampleRates << ", ";
		_os << "native Format: " << _obj.nativeFormats;
	}
	_os << "}";
	return _os;
}