// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "examples/versioning/hr_system_client.mojom.h"
#include "mojo/public/c/system/main.h"
#include "mojo/public/cpp/application/application_delegate.h"
#include "mojo/public/cpp/application/application_impl.h"
#include "mojo/public/cpp/application/application_runner.h"
#include "mojo/public/cpp/environment/logging.h"
#include "mojo/public/cpp/utility/run_loop.h"

namespace mojo {
namespace examples {

void LogEmployee(const EmployeePtr& employee) {
  if (!employee) {
    MOJO_LOG(INFO) << "Employee[null]";
    return;
  }

  MOJO_LOG(INFO) << "Employee[employee_id=" << employee->employee_id
                 << ", name=" << employee->name
                 << ", department=" << employee->department << "]";
}

class HumanResourceSystemClient : public ApplicationDelegate {
 public:
  ~HumanResourceSystemClient() override {}

  void Initialize(ApplicationImpl* app) override {
    app->ConnectToService("mojo:versioning_hr_system_server", &database_);

    MOJO_LOG(INFO) << "Query an existing employee with ID 1...";
    database_->QueryEmployee(
        1u, [](EmployeePtr employee) { LogEmployee(employee); });
    database_.WaitForIncomingMethodCall();

    EmployeePtr new_employee(Employee::New());
    new_employee->employee_id = 2u;
    new_employee->name = "Marge Simpson";
    new_employee->department = DEPARTMENT_SALES;

    MOJO_LOG(INFO) << "Add a new employee with the following information:";
    LogEmployee(new_employee);
    database_->AddEmployee(new_employee.Pass(), [](bool success) {
      MOJO_LOG(INFO) << "success: " << success;
    });
    database_.WaitForIncomingMethodCall();

    MOJO_LOG(INFO) << "Query the newly added employee with ID 2...";
    database_->QueryEmployee(2u, [](EmployeePtr employee) {
      LogEmployee(employee);
      RunLoop::current()->Quit();
    });
  }

 private:
  HumanResourceDatabasePtr database_;
};

}  // namespace examples
}  // namespace mojo

MojoResult MojoMain(MojoHandle shell_handle) {
  mojo::ApplicationRunner runner(new mojo::examples::HumanResourceSystemClient);
  return runner.Run(shell_handle);
}
