#include "alloc.h"
#include "descriptor_tables.h"
#include "io.h"
#include "log.h"
#include "multiboot.h"
#include "paging.h"
#include "syscall.h"
#include "task.h"
#include "timer.h"
#include "vfs.h"
#include "vfs_initrd.h"
#include "vga.h"
#include <dri/ata_pio/ata_pio.h>
#include <dri/pci/pci.h>

void greet()
{
	kprintf("Hello from get_task_id() = %d, get_process_id() = %d\n",
			get_task_id(), get_process_id());
}

void other_thread(size_t data)
{
	kprintf("data is 0x%x\n", data);
	greet();
	kprintf("Returning from other_thread\n");

	return;
}

int kmain(struct multiboot_info *mboot)
{
	init_paging();
	init_vga();
	init_descriptor_tables();
	init_syscall();
	vga_clear();

	init_timer(20);
	init_allocator();
	init_kbd();

#ifdef TEST_ALLOC
	test_allocator();
#endif

	// Load initrd
	struct multiboot_info mb = make_multiboot_physical(mboot);
	init_vfs();

#ifdef INITRD
	kassert(mb.mods_count, "No multiboot modules loaded!");
	kprintf("mboot->mods_addr = %d (0x%x)\n", mb.mods_addr, mb.mods_addr);
	uchar *initrd_loc = (uchar *)((uint *)mb.mods_addr)[0];

	kprintf("initrd is at 0x%x to 0x%x\n", initrd_loc);

	init_initrd_vfs(initrd_loc);
#endif

	kprintf("VFS initialized\n");

	vga_set_color(LIGHT_GREEN, BLACK);
	kprintf("Setup complete!\n");
	vga_set_color(WHITE, BLACK);

#ifdef TEST_VFS_INITRD
	kprintf("fs_readdir(\"/dev/initrd\")\n");

	struct fs_dirent dirent;
	for (int i = 0; fs_readdir(&root, i, &dirent); i++)
	{
		kprintf("name: %s, inode: %d\n", dirent.name, dirent.inode);
	}
#endif

	asm volatile("sti");

	kprintf("initializing tasks\n");
	init_tasks();
	kprintf("\ndone initializing tasks\n");

//#ifdef TEST_THREADS
	spawn_thread(other_thread, NULL);

	greet();
//#endif

#ifdef TEST_ATA_PIO
	test_ata_pio();
#endif

#ifdef TEST_PCI
	kprintf("Enumerating PCI devices:\n");
	for (int bus = 0; bus < 0xff; bus++)
	{
		for (int slot = 0; slot < 32; slot++)
		{
			for (int func = 0; func < 8; func++)
			{
				uint vendor;

				struct pci_vendor *v = pci_check_vendor(bus, slot, func, &vendor);

				if (vendor != ~0)
				{
					kprintf("%d %d %d --- 0x%x --- %s\n", bus, slot, func, vendor, v->name);
				}
			}
		}
	}
#endif

	while (true)
		asm volatile("hlt");


	return 0xCAFEBABE;
}
