#include <extra2d/platform/input_module.h>
#include <extra2d/core/service_locator.h>
#include <extra2d/core/registry.h>
#include <extra2d/services/event_service.h>
#include <extra2d/platform/window_module.h>

namespace extra2d {

InputModule::InputModule(std::function<void(InputCfg&)> configFn) {
    configFn(cfg_);
}

InputModule::~InputModule() {
    if (initialized_) {
        shutdown();
    }
}

bool InputModule::init() {
    if (initialized_) return true;
    
    // 获取WindowModule依赖
    auto* winMod = Registry::instance().get<WindowModule>();
    if (!winMod || !winMod->win()) {
        return false;
    }
    
    // 获取输入接口
    input_ = winMod->win()->input();
    if (!input_) {
        return false;
    }
    
    initialized_ = true;
    return true;
}

void InputModule::shutdown() {
    if (!initialized_) return;
    
    input_ = nullptr;
    initialized_ = false;
}

void InputModule::update() {
    if (initialized_ && input_) {
        input_->update();
    }
}

} // namespace extra2d
