#pragma once

#include "../mycontextbase.h"

class CInformer : public CMyContextBase
{
	DECLARE_DYNCREATE(CInformer);

public:

	BOOL funcGetMethodsTable(CValue &RetVal, CValue **ppValue);
	BOOL funcGetPropsTable(CValue &RetVal, CValue **ppValue);

	BOOL funcHaveContextMethod(CValue &RetVal, CValue **ppValue);
	BOOL funcHaveContextProp(CValue &RetVal, CValue **ppValue);

	// ЯвляетсяОбъектом(ПроверяемыйОбъектИлиНаименованиеТипа, НаименованиеТипаНаКоторыйПроверяем)
	BOOL funcTheObjectIs(CValue &RetVal, CValue **ppValue);

	// ЯвляетсяФункцией(ПроверяемыйОбъект, НаименованиеМетодаКоторыйПроверяем)
	BOOL funcIsFunction(CValue &RetVal, CValue **ppValue);

	// получить командную строку 1С (взято из FormEx)
	BOOL  funcCommandLine(CValue& RetVal, CValue **params);
	// получить путь к приложению 1С
	BOOL  funcGetAppPath(CValue& RetVal, CValue **params);

	// получить внутренний тип значения для контекста (из RuntimeClass)
	// например, для объекта "Регистры" встроенный ТипЗначенияСтр выдает "НеизвестныйОбъект"
	BOOL  funcGetInternalTypeName(CValue& RetVal, CValue **params);

	static bool GetMethodsTable(const CValue& ContextValue, CValue& RetVal);
	static bool GetPropsTable(const CValue& ContextValue, CValue& RetVal);

	static void GetMethodOfContext(class CValue * * ppValue);
public:

	DECLARE_MY_CONTEXT();

private:
	static bool GetTableFromContext(bool bNeedMethods, const CValue& ContextValue, CValue& VTValue);
	static bool GetTableFromContext(bool bNeedMethods, CBLContext* pCont, CValueTable* pVT);

	BOOL HaveContextMethodOrProp(bool bNeedMethods, CValue &RetVal, CValue **ppValue);
};
