
#include "argument.h"




int argument_determineDatatypeOfArgument( char * argumentDeclaration, struct array * variables ) {


	// int
	if( text_isValidNumber( argumentDeclaration ) == 1 ) {

		return -1;

	}

	// single quote
	if( strchr( argumentDeclaration, 39) != NULL ) {

		return -2;

	}

	// text
	if( strchr( argumentDeclaration, '"') != NULL ) {

		return -2;

	}

	struct variable * variableInstance = variable_getByName( variables, argumentDeclaration );



	if( strcmp( variableInstance->datatype, "this_variable_is_missing" ) == 0 ) {

		return 0;
	}

	if( strcmp( variableInstance->datatype, "int" ) == 0 ) {

		return -1;

	}

	if( (strcmp(variableInstance->datatype,  "char" ) == 0) && variableInstance->isPointer == 1 ) {

		return -2;

	}

	//printf("				-----------check if this is an variable: %s  %s\n\n", argumentDeclaration, variableInstance->datatype);

	struct class * classInstance		= application_getClassByClassName( allClasses, variableInstance->datatype );

	if( classInstance == NULL ) {

		printf(ANSI_COLOR_RED "\n\n\n\n		ERROR class '%s' does not exist!!, The file containing the class '%s' is not included.\n\n\n\n" ANSI_COLOR_RESET, variableInstance->datatype, variableInstance->datatype );

		return 0;

	}

	return ( int ) classInstance->classIndex;

}

struct array * argument_getArgumentDatatypes( struct array * arguments, struct array * variables  ) {

	int argumentCount = array_length( arguments );

	struct array * argumentDatatypes = array_new();

	for (int i = 0; i < argumentCount; ++i)
	{

		char * currentArgument  			= text_removeWhiteSpaces( array_get( arguments, i ) );

		uintptr_t datatype 					= argument_determineDatatypeOfArgument( currentArgument, variables );


		array_add( argumentDatatypes, (void *) datatype );
		
	}

	return argumentDatatypes;

}