/**
 * \example ChangeOwner.cpp
 * Пример использования классов File, Path, Context, NDSObject, String,
 * Exception. Данный пример демонстрирует простейшую программу, которая
 * позволяет получить и изменить владельца файла.
 */

#include <stdio.h>
#include "BGDNet.h"

using BGDNet::Path;
using BGDNet::Server;
using BGDNet::Volume;
using BGDNet::File;
using BGDNet::Context;
using BGDNet::NDSObject;
using BGDNet::String;
using BGDNet::Exception;

void printOwner( const File& f );

int main( int argc, char* argv[] )
{
  if (2 != argc && 3 != argc)
  {
    puts("Usage: ChangeOwner.exe <file> [<owner>]");
    return -1;
  }

  try
  {
    Path p(argv[1], NW_NS_LONG);
    Server srv(p.srv());
    Volume vol(&srv, p.vol());
    nuint8 ns = vol.supportsLongNames() ? NW_NS_LONG : NW_NS_DOS;
    File f(&vol, Path(p.path(), ns));

    printOwner(f);

    if (3 == argc)
    {
      Context ctx;
      printf("\nChanging owner to: %s\n\n", argv[2]);
      f.ownerName(ctx, argv[2]);
      printOwner(f);
    }
  }
  catch (const Exception& e)
  {
    printf("ERROR: %s\n", e.what());
  }
  puts("----------");

  return 0;
}

void printOwner( const File& f )
{
  Context ctx;
  printf(
    "File: %s\nOwner: %s\n",
    f.fullPath().ptr(),
    f.ownerName(ctx).ptr());
}
