/**
 * \example NetworkDrive.cpp
 * Пример использования классов NetworkDrive, NetworkDrives, Directory,
 * String, Exception.
 * Данный пример демонстрирует простейшую программу, которая выводит
 * на консоль содержимое заданного сетевого диска.
 */

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

using BGDNet::NetworkDrive;
using BGDNet::NetworkDrives;
using BGDNet::Directory;
using BGDNet::Exception;

bool checkDrive( const NetworkDrive* pDrv );

int main( int argc, char* argv[] )
{
  if (argc > 2)
  {
    puts("Usage: NetworkDrive.exe [<drive_letter>]");
    return -1;
  }

  char letter = (1 == argc) ? 0 : *argv[1];

  try
  {
    if (letter)
    {
      // Задана буква, проверяем диск:
      NetworkDrive drv(letter);
      if (!checkDrive(&drv))
        printf("%c: invalid drive\n", letter);
    }
    else
    {
      // Буква не задана, выводим все сетевые диски:
      NetworkDrives drvs;
      for (int i = 0; i < drvs.count(); ++i)
        checkDrive(drvs[i]);
    }
  }
  catch (const Exception& e)
  {
    printf("ERROR: %s\n", e.what());
  }
  puts("----------");

  return 0;
}

bool checkDrive( const NetworkDrive* pDrv )
{
  const Directory* pDir = pDrv->mappedDir();
  if (!pDir)
    return false;
  else
  {
    printf("%c --> %s\n", pDrv->drvLetter(), pDir->fullPath().ptr());
    return true;
  }
}
