#include "CosNaming_c.hh"
#include "Butikk_c.hh"
#include <fstream.h>

int main(int argc, char* const* argv) 
{
    try {

	//
	// Initialiser
	//

	// Initialiser ORB
	CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);

	// Få aksess til navnetjener
	CosNaming::NamingContext_var rootContext = 
	    CosNaming::NamingContext::_narrow(
                orb->resolve_initial_references("NameService"));

	//
	// Få aksess til objektet
	//

	// Lokaliser butikk hos navnetjener
	CosNaming::Name name;
	name.length(1);
	name[0].id = (const char *) "Butikk";
	name[0].kind = (const char *) "";
	Butikk_var butikk = Butikk::_narrow(rootContext->resolve(name));

	//
	// Bruk objektet
	//

	// Bruk argv[1] som kundenavn (eller forhåndsvalgt)
	const char* navn = argc > 1 ? argv[1] : "Anders Andersen";

	// Registrer kunde
	KundeID id = butikk->regKunde(navn);
	cout << "Ny kunde " << navn << " (" << id << ")" << endl;

	// Bruk argv[2] som kunde id (elle forhåndsvalgt)
	KundeID kid = argc > 2 ? atoi(argv[2]) : id;

	// Hent kunde
	char * kunde = butikk->getKunde(kid);
	cout << "Kunde " << kunde << " hentet" << endl;

	// Slett kunde
	KundeID did = argc > 3 ? atoi(argv[3]) : -1;
	if (did >= 0) {
	  char * nonkunde = butikk->getKunde(did);
	  butikk->delKunde(did);
	  cout << "Kunde " << nonkunde << " slettet" << endl;
	}

	// List alle kunder
	KundeListe_ptr kundeliste = butikk->listKunder();
	cout << "Antall: " << kundeliste->length() << endl;
	for (CORBA::ULong i = 0; i < kundeliste->length(); i++)
	  cout << "Kunde: " << (*kundeliste)[i] << endl;

    } catch(const CORBA::Exception& e) {
	cerr << e << endl;
	return 1;
    }

    return 0;
}
