#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "process.h"

//Assume that the string passed in is null terminated

Process *createProcess(char *username, char job, int arrival_time, int duration, int affinity) {
    // Allocate memory for the process, and check if it was successful
    Process *node = calloc(1, sizeof(Process));
    if (node == NULL) {
        printf("Error allocating memory for process\n");
        exit(EXIT_FAILURE);
    }
	// Free the data first, then allocate memory for the new data
	node->username = calloc(strlen(username) + 1, sizeof(char));
	if (node->username == NULL) {
		printf("Error allocating memory for username data\n");
		exit(EXIT_FAILURE);
	}
	// Copy data from the string passed in to the process's data
	// Makes sure if the string passed in is changed, the process's data is not changed
	// Also makes sure that if the data is on the stack, it is not freed at some other point
	strcpy(node->username, username);
	node->job = job;
	node->arrival_time = arrival_time;
	node->duration = duration;
	node->next_elem = NULL;
	node->prev_elem = NULL;
	node->finish_time = 0;
	node->affinity = affinity;
    return node;
}

void destroyProcess(Process *node) {
    // Free the data first, then free the process
    free(node->username);
    free(node);
}
