#include "board.h"

#include "common/apple/cf_helpers.h"

const char* ffDetectBoard(FFBoardResult* result)
{
    FF_IOOBJECT_AUTO_RELEASE io_registry_entry_t service = IOServiceGetMatchingService(MACH_PORT_NULL, IOServiceMatching("IOPlatformExpertDevice"));
    if (!service)
        return "No IOPlatformExpertDevice found";

    FF_CFTYPE_AUTO_RELEASE CFTypeRef boardId = IORegistryEntryCreateCFProperty(service, CFSTR("board-id"), kCFAllocatorDefault, kNilOptions);
    if (boardId)
        ffCfStrGetString(boardId, &result->name);
    else
    {
        io_name_t name;
        if (IORegistryEntryGetName(service, name) == kIOReturnSuccess)
            ffStrbufSetS(&result->name, name);
    }

    FF_CFTYPE_AUTO_RELEASE CFStringRef version = IORegistryEntryCreateCFProperty(service, CFSTR("version"), kCFAllocatorDefault, kNilOptions);
    if (version)
        ffCfStrGetString(version, &result->version);

    FF_CFTYPE_AUTO_RELEASE CFTypeRef manufacturer = IORegistryEntryCreateCFProperty(service, CFSTR("manufacturer"), kCFAllocatorDefault, kNilOptions);
    if (manufacturer)
        ffCfStrGetString(manufacturer, &result->vendor);

    return NULL;
}
