#pragma once

#include "kint.h"
#include "registers.h"

#define INIT_TASKS_INTERRUPT 0x81

extern bool tasks_initialized;

/**
 * A process. For now there is only one, the kernel.
 */
struct process
{
	bool exists;
	int id; // kernel uses pid 0, which cannot exit
	int ring;
	int uid;
	char name[32];
	uint page_directory_p;
	// most recent (bottom) stack used by a task, next
	// stack should be under this one.
	// NOTE: must be PAGE ALIGNED
	uint last_stack_pos;
};
/**
 * The smallest schedulable unit, a thread of a process.
 */
struct task
{
	int id;
	/// Is this task waiting for I/O?
	bool waiting;
	struct process *proc;
	/// Physical address of the top of the stack.
	uint stack_top_p;
	struct registers state;
};

struct ll_task_i
{
	struct ll_task_i *next, *prev;
	struct task task;
};

// extern struct process processes[1024];
// extern struct ll_task_i *first_task, *current_task;

// Note: interrupts must be enabled BEFORE this for it to work.
void init_tasks();
struct process *get_process(uint pid);

int get_process_id();
int get_task_id();

// For compatibility I guess
#define getpid get_process_id

typedef void (*task_function_t)(void *data);

#define TASK_FUNCTION(f) ((task_function_t)(f))

void spawn_thread(task_function_t function, void *data);

void set_waiting(int tid, bool waiting);

/**
 * Halt the current thread.
 */
void kill_this_thread();

/**
 * Force a task switch
 * @param ctx The context to switch out of
 */
void switch_task(struct registers ctx);

/**
 * Switch to a specific task. Only call in a safe environment (ISR).
 */
void switch_to_task(struct task *task);

/**
 * Internal. Do not call.
 */
void _sys_init_tasks_h(struct registers *regs);
