// Defintions for the class Contract
// File: contrct6.cpp

// Used in chapter 10
#include <string.h>
#include "contrct6.h"

Contract::Contract(int ID, int sqFootage, int numDesks, int numDays,
			   char* name, char* oStreetAddr, char* oCity,
			   char* oState, char* oZip)
{       contractID = ID;
	squareFootage = sqFootage;
	numberOfDesks = numDesks;
	numberOfDaysPerWeek = numDays;

	int len = strlen(name);
	contracteeName = new char[len + 1];
	strcpy(contracteeName, name);

	len = strlen(oStreetAddr);
	officeStreetAddress = new char[len + 1];
	strcpy(officeStreetAddress,oStreetAddr);

	len = strlen(oCity);
	officeCity = new char[len + 1];
	strcpy(officeCity,oCity);

	len = strlen(oState);
	officeState = new char[len + 1];
	strcpy(officeState,oState);

	len = strlen(oZip);
	officeZip = new char[len + 1];
	strcpy(officeZip,oZip);
}


Contract::Contract()
{       contractID = 0;
	squareFootage = 0;
	numberOfDesks = 0;
	numberOfDaysPerWeek = 0;

	contracteeName = new char[1];
	strcpy(contracteeName, "");

	officeStreetAddress = new char[1];
	strcpy(officeStreetAddress,"");

	officeCity = new char[1];
	strcpy(officeCity,"");

	officeState = new char[1];
	strcpy(officeState,"");

	officeZip = new char[1];
	strcpy(officeZip,"");
}

Contract :: Contract(const Contract& c)
{	int len = strlen(c.contracteeName);
	contracteeName = new char[len + 1];
	strcpy(contracteeName, c.contracteeName);

	len = strlen(c.officeStreetAddress);
	officeStreetAddress = new char[len + 1];
	strcpy(officeStreetAddress,c.officeStreetAddress);

	len = strlen(c.officeCity);
	officeCity = new char[len + 1];
	strcpy(officeCity,c.officeCity);

	len = strlen(c.officeState);
	officeState = new char[len + 1];
	strcpy(officeState,c.officeState);

	len = strlen(c.officeZip);
	officeZip = new char[len + 1];
	strcpy(officeZip,c.officeZip);

	contractID = c.contractID;
	squareFootage = c. squareFootage;
	numberOfDaysPerWeek = c.numberOfDaysPerWeek;
	numberOfDesks = c.numberOfDesks;
}

void Contract :: 	CopyContract(Contract c)
{	int len = strlen(c.contracteeName);
	contracteeName = new char[len + 1];
	strcpy(contracteeName, c.contracteeName);

	len = strlen(c.officeStreetAddress);
	officeStreetAddress = new char[len + 1];
	strcpy(officeStreetAddress,c.officeStreetAddress);

	len = strlen(c.officeCity);
	officeCity = new char[len + 1];
	strcpy(officeCity,c.officeCity);

	len = strlen(c.officeState);
	officeState = new char[len + 1];
	strcpy(officeState,c.officeState);

	len = strlen(c.officeZip);
	officeZip = new char[len + 1];
	strcpy(officeZip,c.officeZip);

	contractID = c.contractID;
	squareFootage = c. squareFootage;
	numberOfDaysPerWeek = c.numberOfDaysPerWeek;
	numberOfDesks = c.numberOfDesks;
}



Contract :: ~Contract()
{	delete [] contracteeName;

	delete [] officeStreetAddress;
	delete [] officeCity;
	delete [] officeState;
	delete [] officeZip;
}

void Contract::ChangeSquareFootage(int sqFootage)
{ 	squareFootage = sqFootage;
}

void Contract::ChangeNumDesks( int numDesks)
{	numberOfDesks = numDesks;
}

void Contract::ChangeNumDays( int numDays)
{	numberOfDaysPerWeek = numDays;
}

void Contract::ChangeID( int ID)
{	contractID = ID;
}

int Contract::ProvideSquareFootage()
{	return squareFootage;
}

int Contract::ProvideNumberOfDesks()
{	return numberOfDesks;
}

int Contract::ProvideNumberOfDays()
{	return numberOfDaysPerWeek;
}

int Contract::ProvideID()
{	return contractID;
}

double Contract::ProvidePerWeekCharge ()
{	double perWeekCharge;
	perWeekCharge = numberOfDaysPerWeek * (0.05 * squareFootage + 5 * numberOfDesks);
	return perWeekCharge;
}

char* Contract:: ProvideContracteeName()
{	return contracteeName;
}

void  Contract:: ChangeContracteeName(char* name)
{	delete [] contracteeName;  // delete the whole string array
	int len = strlen(name);
	contracteeName = new char[len + 1]; // don't forget the null char
	strcpy(contracteeName, name);
}

char* Contract:: ProvideOfficeStreetAddress()
{	return officeStreetAddress;
}

void  Contract:: ChangeOfficeStreetAddress(char* streetAddr)
{	delete [] officeStreetAddress;  // delete the whole string array
	int len = strlen(streetAddr);
	officeStreetAddress = new char[len + 1]; // don't forget the null char
	strcpy(officeStreetAddress, streetAddr);
}

char* Contract:: ProvideOfficeCity()
{	return officeCity;
}

void  Contract:: ChangeOfficeCity(char* city)
{	delete [] officeCity;  // delete the whole string array
	int len = strlen(city);
	officeCity = new char[len + 1]; // don't forget the null char
	strcpy(officeCity, city);
}

char* Contract:: ProvideOfficeState()
{	return officeState;
}

void  Contract:: ChangeOfficeState(char* state)
{	delete [] officeState;  // delete the whole string array
	int len = strlen(state);
	officeState = new char[len + 1]; // don't forget the null char
	strcpy(officeState, state);
}


char* Contract:: ProvideOfficeZip()
{	return officeZip;
}

void  Contract:: ChangeOfficeZip(char* zip)
{	delete [] officeZip;  // delete the whole string array
	int len = strlen(zip);
	officeZip = new char[len + 1]; // don't forget the null char
	strcpy(officeZip, zip);
}