#include "bios.h"

#include "common/settings.h"
#include "common/sysctl.h"
#include "common/io.h"
#include "common/smbios.h"

const char* ffDetectBios(FFBiosResult* result) {
    ffSettingsGetFreeBSDKenv("smbios.bios.reldate", &result->date);
    ffCleanUpSmbiosValue(&result->date);
    ffSettingsGetFreeBSDKenv("smbios.bios.revision", &result->release);
    ffCleanUpSmbiosValue(&result->release);
    ffSettingsGetFreeBSDKenv("smbios.bios.vendor", &result->vendor);
    ffCleanUpSmbiosValue(&result->vendor);
    ffSettingsGetFreeBSDKenv("smbios.bios.version", &result->version);
    ffCleanUpSmbiosValue(&result->version);
    ffSysctlGetString("machdep.bootmethod", &result->type);

    if (result->type.length == 0) {
        if (ffSettingsGetFreeBSDKenv("loader.efi", &result->type)) {
            ffStrbufSetStatic(&result->type, ffStrbufEqualS(&result->type, "1") ? "UEFI" : "BIOS");
        } else {
            ffStrbufSetStatic(&result->type,
                ffPathExists("/dev/efi" /*efidev*/, FF_PATHTYPE_FILE) ||
                        ffPathExists("/boot/efi/efi/" /*efi partition. Note /boot/efi exists on BIOS system*/, FF_PATHTYPE_DIRECTORY)
                    ? "UEFI"
                    : "BIOS");
        }
    }
    return NULL;
}
