#include "stdafx.h"
#include "LKFAufenthaltMeldeDiag.h"

extern "C" {
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lkf5defs.h"
}

#include "LKFAufenthalt.h"
namespace lkfxdok {
	namespace c {

		LKFAufenthaltMeldeDiag::LKFAufenthaltMeldeDiag(LKFAufenthalt^ aufenthalt, void* meldeDiagPointer)
		{
			long diagIndex;
			_aufenthalt = aufenthalt;
			_meldeDiagPointer = meldeDiagPointer;
			_code = lkf_auf_getmeldediag((const LKF_ERROR_LIST*)_meldeDiagPointer, &diagIndex);
			_diagIndex = diagIndex;
		}

		LKFAufenthaltMeldeDiag^ LKFAufenthaltMeldeDiag::NextMeldeDiag::get() {
			void* ne = lkf_auf_nextmeldediag((const LKF_ERROR_LIST*)_meldeDiagPointer);
			if (ne != 0)
				return gcnew LKFAufenthaltMeldeDiag(_aufenthalt, ne);
			return nullptr;
		}

		String^ LKFAufenthaltMeldeDiag::TypeText::get() {
			const char* buf = lkf_plaus_meldediag_typ ((LKF_CONTEXT*)_aufenthalt->_contextWithData->_contextPtr, _code);
			return gcnew String(buf, 0, (int) strlen(buf), System::Text::Encoding::UTF8);
		}

		String^ LKFAufenthaltMeldeDiag::Text::get() {
			const char* buf = lkf_plaus_meldediag_text((LKF_CONTEXT*)_aufenthalt->_contextWithData->_contextPtr, _code);
			return gcnew String(buf, 0, (int) strlen(buf), System::Text::Encoding::UTF8);
		}

		String^ LKFAufenthaltMeldeDiag::Line::get() {
			char buf[512];
			lkf_plaus_GetMeldeDiagText((LKF_AUFENTHALT*)_aufenthalt->_aufenthaltPtr, (const LKF_ERROR_LIST*)_meldeDiagPointer, buf, 512);
			return gcnew String(buf, 0, (int) strlen(buf), System::Text::Encoding::UTF8);
		}

		String^ LKFAufenthaltMeldeDiag::Diag::get() {
			char buf[24];
			lkf_auf_get_diag((LKF_AUFENTHALT*)_aufenthalt->_aufenthaltPtr, (unsigned int) _diagIndex, buf, nullptr);
			return gcnew String(buf);
		}

		char LKFAufenthaltMeldeDiag::TypeId::get() {
			return _code;
		}

		int LKFAufenthaltMeldeDiag::DiagIndex::get() {
			return _diagIndex;
		}

	}
}
