#include "CosNaming_c.hh"
#include "ButikkImpl.h"
#include <fstream.h>

int main(int argc, char *argv[]) {

  try {

    // Initialiser ORB
    CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
    cout << "ORB initialisert" << endl;

    // Få referanse til root POA
    PortableServer::POA_var poa = 
      PortableServer::POA::_narrow(orb->resolve_initial_references("RootPOA"));
    cout << "Root POA aksess" << endl;

    // Aktiver POA forvalter
    PortableServer::POAManager_var mgr = poa->the_POAManager();
    mgr->activate();
    cout << "POA manager aktivert" << endl;

    // Lag butikk
    ButikkImpl butikk_servant;
    Butikk_var butikk_obj = butikk_servant._this();
    cout << "Butikk lagd" << endl;

    // Få aksess til Naming Service root_context
    CosNaming::NamingContext_var rootContext = 
      CosNaming::NamingContext::_narrow(
        orb->resolve_initial_references("NameService"));
    cout << "Root context aksess" << endl;

    // Registrer objektreferanse til navnetjener 
    CosNaming::Name name;
    name.length(1);
    name[0].id = (const char *) "Butikk";
    name[0].kind = (const char *) "";
    rootContext->rebind(name, butikk_obj);
    cout << "Butikk registrert" << endl;
    
    // ORB kan starte å håndtere forespørsler
    cout << "ORB startes" << endl;
    orb->run();

  } catch(const CORBA::Exception& e) {
    cerr << e << endl;
    return 1;
  }

  return 0;

}
