using System;
using System.Runtime.InteropServices;
using System.Text;

namespace Addison_Wesley.Codebook.Filesystem
{
   public class FolderUtils
   {
      /// <summary>
      /// Deklarace funkce GetWindowsDirectory z API
      /// </summary>
      [DllImport("kernel32.dll", SetLastError = true)]
      private static extern uint GetWindowsDirectory(StringBuilder lpBuffer,
         uint uSize);

      /// <summary>
      /// Vrátí cestu k adresáři Windows
      /// </summary>
      public static string GetWindowsDirectoryName()
      {
         const int MAX_PATH = 260;
         StringBuilder buffer = new StringBuilder(MAX_PATH + 1);
         if (GetWindowsDirectory(buffer, MAX_PATH + 1) > 0)
         {
            return buffer.ToString();
         }
         else
         {
            throw new Exception("Chyba Windows " + Marshal.GetLastWin32Error() +
               " při zjišťování adresáře Windows");
         }
      }

      /// <summary>
      /// Vrátí cestu k systémovému adresáři Windows
      /// </summary>
      public static string GetSystemDirectoryName()
      {
         return Environment.SystemDirectory;
      }

      /// <summary>
      /// Vrátí cestu k programovému adresáři
      /// </summary>
      public static string GetProgramDirectoryName()
      {
         return Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
      }

      /// <summary>
      /// Vrátí cestu k adresáři s daty aplikací pro lokální uživatele
      /// </summary>
      public static string GetNonRoamingUserApplicationDataDirectoryName()
      {
         return Environment.GetFolderPath(
            Environment.SpecialFolder.LocalApplicationData);
      }

      /// <summary>
      /// Vrátí cestu k adresáři s daty aplikací pro vzdálené uživatele
      /// </summary>
      public static string GetRoamingUserApplicationDataDirectoryName()
      {
         return Environment.GetFolderPath(
            Environment.SpecialFolder.ApplicationData);
      }

      /// <summary>
      /// Vrátí cestu k adresáři s daty aplikací pro všechny uživatele
      /// </summary>
      public static string GetAllUsersApplicationDataDirectoryName()
      {
         return Environment.GetFolderPath(
            Environment.SpecialFolder.CommonApplicationData);
      }

      /// <summary>
      /// Vrátí cestu k adresáři "Plocha"
      /// </summary>
      public static string GetDesktopDirectoryName()
      {
         return Environment.GetFolderPath(
            Environment.SpecialFolder.DesktopDirectory);
      }

      /// <summary>
      /// Vrátí cestu k adresáři s oblíbenými položkami
      /// </summary>
      public static string GetFavoritesDirectoryName()
      {
         return Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
      }

      /// <summary>
      /// Vrátí cestu k adresáři, který obsahuje odkazy na nedávno otevřené dokumenty
      /// </summary>
      public static string GetRecentDirectoryName()
      {
         return Environment.GetFolderPath(Environment.SpecialFolder.Recent);
      }
   }
}
