#include "basic.h"

BasicInventory::BasicInventory(const char *title, double price, size_t amount)
 :	myTitle(title),
	myPrice(price),
	readOnly(false),
	myInStock(amount)	
{

}

int BasicInventory::findScanCode(const char *code)
{
	int i;
	if(myScancodes.empty()) {
		return -1;
	}
	for(i=0; i<myScancodes.size(); i++) {
		if(myScancodes[i].compare(code) == 0) {
			return i;
		}
	}
	return -1;
}

void BasicInventory::addScanCode(const char *code)
{
	myScancodes.push_back(code);
}

void BasicInventory::removeScanCode(const char *code)
{	int i;
	vector<string>::iterator iter = myScancodes.begin();
	if((i = checkScanCode(code)) < 0) {
		return;
	}
	while(i > 0) {
		iter++;
		i--;
	}
	myScancodes.erase(iter);
}

size_t BasicInventory::scanCodes( void )
{
	return myScancodes.size();
}

void BasicInventory::toggleReadOnly( void )
{
	readOnly = !readOnly;
}

bool BasicInventory::isReadOnly( void )
{
	return readOnly;
}

void BasicInventory::setAmountInStock(size_t amount)
{
	myInStock = amount;
}

size_t BasicInventory::amountInStock( void )
{
	return myInStock;
}

bool BasicInventory::checkScanCode(const char *code)
{
	int i;
	i = findScanCode(code);
	if(i<0)
		return false;
	else
		return true;
}

void BasicInventory::setPrice(double price)
{
	myPrice = price;
}

double BasicInventory::getPrice( void )
{
	return myPrice;
}

void BasicInventory::setTitle(const char *title)
{
	myTitle = title;
}

const char *BasicInventory::getTitle( void )
{
	return myTitle.c_str();
}

const char *BasicInventory::getScanCode(int index = 0)
{
	if(myScancodes.size() == 0) {
		return NULL;
	}
	return myScancodes[index].c_str();
}

const char *BasicInventory::shortDescr( void )
{
	ostringstream oss();
	oss << getTitle() << '\t' << getPrice();
	return oss.str().c_str();
}

const char *BasicInventory::longDescr( void )
{
	ostringstream oss();

	oss << getTitle() << '\t' << getPrice() << '\t' << amountInStock() << '\t';

	if(isReadOnly()) {
		oss << 'R';
	} else {
		oss << 'M';
	}
	return oss.str().c_str();
}
