//! NOTE: this file is autogenerated, DO NOT MODIFY
//--------------------------------------------------------------------------------
// Section: Constants (4)
//--------------------------------------------------------------------------------
pub const TSF_Hardware = @as(u32, 1);
pub const TSF_Authenticated = @as(u32, 2);
pub const TSF_IPv6 = @as(u32, 4);
pub const TSF_SignatureAuthenticated = @as(u32, 8);

//--------------------------------------------------------------------------------
// Section: Types (2)
//--------------------------------------------------------------------------------
pub const TIME_ZONE_INFORMATION = extern struct {
    Bias: i32,
    StandardName: [32]u16,
    StandardDate: SYSTEMTIME,
    StandardBias: i32,
    DaylightName: [32]u16,
    DaylightDate: SYSTEMTIME,
    DaylightBias: i32,
};

pub const DYNAMIC_TIME_ZONE_INFORMATION = extern struct {
    Bias: i32,
    StandardName: [32]u16,
    StandardDate: SYSTEMTIME,
    StandardBias: i32,
    DaylightName: [32]u16,
    DaylightDate: SYSTEMTIME,
    DaylightBias: i32,
    TimeZoneKeyName: [128]u16,
    DynamicDaylightTimeDisabled: BOOLEAN,
};

//--------------------------------------------------------------------------------
// Section: Functions (15)
//--------------------------------------------------------------------------------
// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn SystemTimeToTzSpecificLocalTime(
    lpTimeZoneInformation: ?*const TIME_ZONE_INFORMATION,
    lpUniversalTime: ?*const SYSTEMTIME,
    lpLocalTime: ?*SYSTEMTIME,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.1.2600'
pub extern "kernel32" fn TzSpecificLocalTimeToSystemTime(
    lpTimeZoneInformation: ?*const TIME_ZONE_INFORMATION,
    lpLocalTime: ?*const SYSTEMTIME,
    lpUniversalTime: ?*SYSTEMTIME,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.1.2600'
pub extern "kernel32" fn FileTimeToSystemTime(
    lpFileTime: ?*const FILETIME,
    lpSystemTime: ?*SYSTEMTIME,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn SystemTimeToFileTime(
    lpSystemTime: ?*const SYSTEMTIME,
    lpFileTime: ?*FILETIME,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetTimeZoneInformation(
    lpTimeZoneInformation: ?*TIME_ZONE_INFORMATION,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn SetTimeZoneInformation(
    lpTimeZoneInformation: ?*const TIME_ZONE_INFORMATION,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "kernel32" fn SetDynamicTimeZoneInformation(
    lpTimeZoneInformation: ?*const DYNAMIC_TIME_ZONE_INFORMATION,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "kernel32" fn GetDynamicTimeZoneInformation(
    pTimeZoneInformation: ?*DYNAMIC_TIME_ZONE_INFORMATION,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "kernel32" fn GetTimeZoneInformationForYear(
    wYear: u16,
    pdtzi: ?*DYNAMIC_TIME_ZONE_INFORMATION,
    ptzi: ?*TIME_ZONE_INFORMATION,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows8.0'
pub extern "advapi32" fn EnumDynamicTimeZoneInformation(
    dwIndex: u32,
    lpTimeZoneInformation: ?*DYNAMIC_TIME_ZONE_INFORMATION,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows8.0'
pub extern "advapi32" fn GetDynamicTimeZoneInformationEffectiveYears(
    lpTimeZoneInformation: ?*const DYNAMIC_TIME_ZONE_INFORMATION,
    FirstYear: ?*u32,
    LastYear: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows6.1'
pub extern "kernel32" fn SystemTimeToTzSpecificLocalTimeEx(
    lpTimeZoneInformation: ?*const DYNAMIC_TIME_ZONE_INFORMATION,
    lpUniversalTime: ?*const SYSTEMTIME,
    lpLocalTime: ?*SYSTEMTIME,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows6.1'
pub extern "kernel32" fn TzSpecificLocalTimeToSystemTimeEx(
    lpTimeZoneInformation: ?*const DYNAMIC_TIME_ZONE_INFORMATION,
    lpLocalTime: ?*const SYSTEMTIME,
    lpUniversalTime: ?*SYSTEMTIME,
) callconv(@import("std").os.windows.WINAPI) BOOL;

pub extern "kernel32" fn LocalFileTimeToLocalSystemTime(
    timeZoneInformation: ?*const TIME_ZONE_INFORMATION,
    localFileTime: ?*const FILETIME,
    localSystemTime: ?*SYSTEMTIME,
) callconv(@import("std").os.windows.WINAPI) BOOL;

pub extern "kernel32" fn LocalSystemTimeToLocalFileTime(
    timeZoneInformation: ?*const TIME_ZONE_INFORMATION,
    localSystemTime: ?*const SYSTEMTIME,
    localFileTime: ?*FILETIME,
) callconv(@import("std").os.windows.WINAPI) BOOL;

//--------------------------------------------------------------------------------
// Section: Unicode Aliases (0)
//--------------------------------------------------------------------------------
const thismodule = @This();
pub usingnamespace switch (@import("../zig.zig").unicode_mode) {
    .ansi => struct {},
    .wide => struct {},
    .unspecified => if (@import("builtin").is_test) struct {} else struct {},
};
//--------------------------------------------------------------------------------
// Section: Imports (4)
//--------------------------------------------------------------------------------
const BOOL = @import("../foundation.zig").BOOL;
const BOOLEAN = @import("../foundation.zig").BOOLEAN;
const FILETIME = @import("../foundation.zig").FILETIME;
const SYSTEMTIME = @import("../foundation.zig").SYSTEMTIME;

test {
    @setEvalBranchQuota(comptime @import("std").meta.declarations(@This()).len * 3);

    // reference all the pub declarations
    if (!@import("builtin").is_test) return;
    inline for (comptime @import("std").meta.declarations(@This())) |decl| {
        if (decl.is_pub) {
            _ = @field(@This(), decl.name);
        }
    }
}
