#pragma once
#include "../../repository/repository.h"
#include "../../domain/domain.h"
#include "../../vector/vector.h"


typedef struct 
{
    int (*function)(Repository*, Material*);
    Vector* args;
} FunctionCall;

/*
    Constructor for the FunctionCall
    Input: function - int (*)(Repository*, Material*) - the function to be called
           args - Vector* - the arguments of the function
    Output: a pointer to the newly created FunctionCall
*/
FunctionCall* _FunctionCall_Constructor(int (*function)(Repository*, Material*), Vector* args);

/*
    Destructor for the FunctionCall
    Input: functionCall - FunctionCall*
    Output: -
*/
void _FunctionCall_Destructor(FunctionCall* functionCall);

/*
    Executes the function
    Input: functionCall - FunctionCall*
    Output: -
*/
void _FunctionCall_Execute(FunctionCall* functionCall);