/***************************************************************/
//
//
//		Python	[ python.cpp ]
//
//											Author	kazuki tanaka
//											Date	2017 6/6
/*---------------------------------------------------------------
■Update : 2017/6/6
			python.cppの作成

/*---------------------------------------------------------------
	Include File
---------------------------------------------------------------*/

#include "python.h"

#ifdef _DEBUG
//#pragma comment (lib,"python27_d.lib")
#pragma comment (lib,"python27.lib")
#else if _RELEASE
#pragma comment (lib,"python27.lib")
#endif




/*---------------------------------------------------------------
	Macro Difinition
---------------------------------------------------------------*/


/*----------------------------------------------------------------
	static member variable Initialize 
----------------------------------------------------------------*/





// Python Constructor
Python::Python( )
{

	// Menber Clear Process

}

// Python Destructor
Python::~Python( )
{

	// Do Nothing!!

}

// Python Execution	
static PyObject* Execution( PyObject *self );

PyObject* Execution( PyObject *self )
{

	PyObject *pModule, *pTmp;
	char *sTmp;

	
	Py_Initialize();

	/*
	// モジュールをimport
	pModule = PyImport_ImportModule("script");

	// pythonで言う pTmp = getattr(pModule, 'func')() みたいな。
	pTmp = PyObject_CallMethod(pModule, "func", NULL);

	// PyObjectをC言語の型に変換
	PyArg_Parse(pTmp, "s", &sTmp);

	printf("%s\n", sTmp);

	Py_Finalize();
	*/


	/*
	PyObject *global, *func;

	// Python インタプリタの起動
	Py_Initialize();

	// スクリプトの読み込み
	//PyRun_SimpleString(filename.data());

	// スクリプトの関数への参照を取得
	global = PyModule_GetDict(PyImport_ImportModule("__main__"));
	func = PyDict_GetItemString(global, "multiply");

	// もし参照がうまくとれたら
	if (PyCallable_Check(func))
    {
		// 評価する
		PyObject *ans = PyEval_CallFunction(func, "ii", 6, 3);
		if( ans )
		{
			printf( "Ans = %d.\n", PyInt_AsLong(ans));
		}
		Py_DECREF(ans);
	}

	// リファレンスを解放
	Py_DECREF(global);
    Py_DECREF(func);

	// インタプリタ終了
	Py_Finalize();
	*/
	
	//return 0;
	return pModule;
	

}

PyObject* PythonSystem::spam_system(PyObject *self, PyObject *args)
{
    const char *command;
    int sts;

	Py_Initialize();

	PyObject *global, *func;

	// Python インタプリタの起動
	Py_Initialize();

	// スクリプトの読み込み
	//PyRun_SimpleString();

	// スクリプトの関数への参照を取得
	global = PyModule_GetDict(PyImport_ImportModule("__main__"));
	func = PyDict_GetItemString(global, "multiply");

	// もし参照がうまくとれたら
	if (PyCallable_Check(func))
    {
		// 評価する
		PyObject *ans = PyEval_CallFunction(func, "ii", 6, 3);
		if( ans )
		{
			printf( "Ans = %d.\n", PyInt_AsLong(ans));
		}
		Py_DECREF(ans);
	}

	// リファレンスを解放
	Py_DECREF(global);
    Py_DECREF(func);

	// インタプリタ終了
	Py_Finalize();

    if (!PyArg_ParseTuple(args, "s", &command))
        return NULL;
    sts = system(command);
    return PyLong_FromLong(sts);
}

