#ifndef _KERNEL_FS_FATFS_H
#define _KERNEL_FS_FATFS_H

#include <desc.h>
#include <device/device.h>
#include <dir_entry.h>
#include <libk/std.h>
#include <proc/proc.h>
#include <proc/reschedule.h>

struct vfs_volume;

int fatfs_mount (struct vfs_volume* volume, bool format);

int fatfs16_format (struct vfs_volume* volume);

int fatfs32_format (struct vfs_volume* volume);

int fatfs_describe (struct vfs_volume* volume, const char* path, struct desc* desc);

int fatfs_read_file (struct vfs_volume* volume, const char* path, uint8_t* buffer, size_t off,
                     size_t size);

int fatfs_write_file (struct vfs_volume* volume, const char* path, uint8_t* buffer, size_t off,
                      size_t size, uint32_t flags);

int fatfs_read_dir_entry (struct vfs_volume* volume, const char* path, struct dir_entry* entry,
                          size_t entry_num);

int fatfs_create_file (struct vfs_volume* volume, const char* path);

int fatfs_create_dir (struct vfs_volume* volume, const char* path);

int fatfs_remove (struct vfs_volume* volume, const char* path);

#endif // _KERNEL_FS_FATFS_H
