#ifndef ANSWER_CODE_H
#define ANSWER_CODE_H

#include <stdlib.h>

#define OS_OK                       0x00000000
#define OS_ERR                      0x0000000f

// Общие системные ошибки           (0x00+)
#define OS_ERR_NO_MEMORY            0x00000001  // Ошибка malloc (не хватило ОЗУ)
#define OS_ERR_NOT_INIT             0x00000002  // Объект или таблица не инициализированы (NULL)
#define OS_ERR_NOT_FOUND            0x00000003  // Драйвер, функция или файл не найдены
#define OS_ERR_INVALID_ARG          0x00000004  // Переданы неверные аргументы (argc/argv)
#define OS_ERR_FULL                 0x00000005  // Нет места в таблице или массиве
#define OS_ERR_MAGIC                0x00000006  // Ошибка проверки магического числа (структура битая)
#define OS_WRN_ALREADY_INIT         0x00000007  // Объект уже был инициализирован ранее
#define OS_WRN_NOT_NEED_INIT        0x00000008  // Попытка инициалезировать когда она этого не требует

// Ошибки VFS                       (0x40+)
#define VFS_ERR_TARGET_BUSY         0x00000040  // Ошибка повторное монтирование по занятому пути
#define VFS_ERR_NOT_SUPPORTED       0x00000041  // Ошибка версия FS не поддерживается

// Специфические ошибки VRAM        (0x10+)
#define VRAM_ERR_RANGE              0x00000010  // Попытка записи/чтения за пределами блока
#define VRAM_ERR_HANDLE             0x00000011  // Неверный или несуществующий Handle
#define VRAM_WRN_DEFRAG_REQ         0x00000012  // Требуется дефрагментация для выделения памяти
#define VRAM_ERR_WR_or_RD           0x00000013  // Ошибка чтения записи
#define VRAM_ERR_POOL_MEMORY        0x00000014  // Ошибка выделения памяти

// Ошибки процессов и планировщика  (0x20+)
#define PROC_ERR_STACK              0x00000020  // Не хватило памяти под стек задачи
#define PROC_ERR_PRIORITY           0x00000021  // Недопустимый приоритет FreeRTOS
#define PROC_ERR_ALIVE              0x00000022  // Попытка действия над уже мертвым процессом

// Ошибки графической подсистемы    (0x30+)
#define DISP_ERR_UNSUPPORTED        0x00000030  // Режим экрана или формат пикселя не поддерживается

const char* get_error(uint32_t code);

#endif