const std = @import("std");
const core = @import("core");
const graphics = @import("graphics");
const memory = core.MemoryTracker;

pub const papyrus = @import("papyrus");
pub const HandlerError = papyrus.HandlerError;
pub const NodeHandle = papyrus.NodeHandle;
pub const LocText = papyrus.LocText;
pub const PressedType = papyrus.PressedType;
pub const PapyrusSystem = @import("PapyrusIntegration.zig");

var gPapyrus: *PapyrusSystem = undefined;

pub const Module: core.ModuleDescription = .{
    .name = "ui",
    .enabledByDefault = true,
};

pub fn getSystem() *PapyrusSystem {
    return gPapyrus;
}

pub fn getContext() *papyrus.Context {
    return gPapyrus.papyrusCtx;
}

pub fn start_module(comptime spec: anytype, args: anytype, allocator: std.mem.Allocator) !void {
    _ = args;
    _ = spec;
    _ = allocator;

    // no initialization
    if (core.isUtility()) {
        return;
    }

    gPapyrus = try core.gEngine.createObject(PapyrusSystem, .{ .can_tick = true });
    try gPapyrus.setup(graphics.getContext());
    core.engine_logs("ui start_module");
    memory.MTPrintStatsDelta();
}

pub fn shutdown_module(allocator: std.mem.Allocator) void {
    _ = allocator;
}
