#include "core_defs.hpp"

#include "items/ItemDef.hpp"
#include "content/Content.hpp"
#include "content/ContentBuilder.hpp"
#include "files/files.hpp"
#include "files/engine_paths.hpp"
#include "window/Window.hpp"
#include "window/Events.hpp"
#include "window/input.hpp"
#include "voxels/Block.hpp"

// All in-game definitions (blocks, items, etc..)
void corecontent::setup(EnginePaths* paths, ContentBuilder* builder) {
    {
        Block& block = builder->blocks.create(CORE_AIR);
        block.replaceable = true;
        block.drawGroup = 1;
        block.lightPassing = true;
        block.skyLightPassing = true;
        block.obstacle = false;
        block.selectable = false;
        block.model = BlockModel::none;
        block.pickingItem = CORE_EMPTY;
    }
    {
        ItemDef& item = builder->items.create(CORE_EMPTY);
        item.iconType = ItemIconType::NONE;
    }

    auto bindsFile = paths->getResourcesFolder()/fs::path("bindings.toml");
    if (fs::is_regular_file(bindsFile)) {
        Events::loadBindings(
            bindsFile.u8string(), files::read_string(bindsFile), BindType::BIND
        );
    }

    {
        Block& block = builder->blocks.create(CORE_OBSTACLE);
        for (uint i = 0; i < 6; i++) {
            block.textureFaces[i] = "obstacle";
        }
        block.hitboxes = {AABB()};
        block.breakable = false;
        ItemDef& item = builder->items.create(CORE_OBSTACLE+".item");
        item.iconType = ItemIconType::BLOCK;
        item.icon = CORE_OBSTACLE;
        item.placingBlock = CORE_OBSTACLE;
        item.caption = block.caption;
    }
    {
        Block& block = builder->blocks.create(CORE_STRUCT_AIR);
        for (uint i = 0; i < 6; i++) {
            block.textureFaces[i] = "struct_air";
        }
        block.drawGroup = -1;
        block.skyLightPassing = true;
        block.lightPassing = true;
        block.hitboxes = {AABB()};
        block.obstacle = false;
        ItemDef& item = builder->items.create(CORE_STRUCT_AIR+".item");
        item.iconType = ItemIconType::BLOCK;
        item.icon = CORE_STRUCT_AIR;
        item.placingBlock = CORE_STRUCT_AIR;
        item.caption = block.caption;
    }
}
