#ifndef ANSWER_CODE_H
#define ANSWER_CODE_H

#include <stdlib.h>

#define OS_OK                       0x00000000

// Общие системные ошибки (Generic)
#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  // Попытка инициалезировать когда она этого не требует

// Специфические ошибки 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  // Режим экрана или формат пикселя не поддерживается

// Ошибки APIOS (0x40+)
#define APIOS_ERR_DUPLICATE_NAME    0x00000040  // Попытка зарегистрировать драйвер с именем, которое уже занято
#define APIOS_ERR_EMPTY_API         0x00000041  // У драйвера пустая таблица функций (fn_count == 0)
#define APIOS_ERR_DRIVER_CRASH      0x00000042  // Ошибка при вызове функции: функция вернула критический сбой, требующий выгрузки
#define APIOS_WRN_PARTIAL_API       0x00000043  // Драйвер загружен, но некоторые его функции не реолизованны
#define APIOS_ERR_NOT_INITIALIZED   0x00000044  // Попытка вызова API при неинициализированной таблице APIOS
#define APIOS_ERR_DRIVER_NOT_FOUND  0x00000045  // Попытка вызвать API несущевствууещего драйвера 

const char* get_error(uint32_t code);

#endif