// SKOKO.h : main header file for the SKOKO application
//

#if !defined(AFX_SKOKO_H__EB255EFF_11E4_4A1A_B541_90D8E4E2094A__INCLUDED_)
#define AFX_SKOKO_H__EB255EFF_11E4_4A1A_B541_90D8E4E2094A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__
  #error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h"       // main symbols
#include "BGDNet.h"
#include "UserTree.h"

class CMainFrame;

/////////////////////////////////////////////////////////////////////////////
// CSKOKOApp:
// See SKOKO.cpp for the implementation of this class
//

class CSKOKOApp : public CWinApp
{
public:

  const CUserTree& UserTree( void ) const;
  
  CImageList m_imageList;

  BGDNet::Context m_ctx;
  
  // Перечисление всех иконок в ImageList
  enum
  {
    ICON_NETWORK,
    ICON_NET_DRIVE,
    ICON_SERVER,
    ICON_VOLUME,
    ICON_DIR,
    ICON_FILE,
    ICON_ERROR,
    ICON_ROOT,
    ICON_COUNTRY,
    ICON_ORG,
    ICON_OU,
    ICON_USER,
    ICON_NO_OWNER,
    ICON_COUNT
  };

  // Путь к каталогу для хранения временных файлов
  CString m_tempDir;

  // Имя пользователя
  CString m_userName;

  bool IsAdmin( const CString& userName );
  // Определяет является ли пользователь администратором.

  bool IsAdminMode( void );
  // Определяет, работает ли SKOKO в режиме администратора.
  
  CSKOKOApp();
  ~CSKOKOApp();

  CMainFrame* FrameWnd( void ) const;

// Overrides
  // ClassWizard generated virtual function overrides
  //{{AFX_VIRTUAL(CSKOKOApp)
  public:
  virtual BOOL InitInstance();
  virtual int ExitInstance();
  //}}AFX_VIRTUAL

// Implementation
  //{{AFX_MSG(CSKOKOApp)
  afx_msg void OnAppAbout();
    // NOTE - the ClassWizard will add and remove member functions here.
    //    DO NOT EDIT what you see in these blocks of generated code !
  //}}AFX_MSG
  DECLARE_MESSAGE_MAP()
private:
	
  // Признак того, что программа работает в режиме администратора.
  bool m_bIsAdminMode;

  // Дерево пользователей. Создается при необходимости.
  mutable CUserTree* m_pUserTree;
  
  BOOL InitAdminMode( void );
};

inline CMainFrame* CSKOKOApp::FrameWnd( void ) const
{
  return reinterpret_cast<CMainFrame*>(m_pMainWnd);
}

inline const CUserTree& CSKOKOApp::UserTree( void ) const
{
  if (!m_pUserTree)
    m_pUserTree = new CUserTree(m_ctx);
  return *m_pUserTree;
}

extern CSKOKOApp theApp;

const LPCTSTR ALL_OWNERS = _T("<ALL>");
const LPCTSTR UNKNOWN_OWNER = _T("<NO OWNER>");

CString GetFullUserName(const BGDNet::NDSObject *pObj, bool returnRDN);
CString GetFullUserName(const char* name, bool returnRDN);

const BGDNet::String countryClassName = "Country";
const BGDNet::String orgClassName = "Organization";
const BGDNet::String orgUnitClassName = "Organizational Unit";
const BGDNet::String userClassName = "User";

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SKOKO_H__EB255EFF_11E4_4A1A_B541_90D8E4E2094A__INCLUDED_)
