/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025-2026. All rights reserved.
 * MindIE is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

#include <Python.h>

#include "pylog.h"

namespace FOUNDATION {
PyDoc_STRVAR(InterfaceModuleDoc, "The part of the MindIE-LLM module that is implemented in CXX.");

static PyModuleDef g_InterfaceModule = {
    PyModuleDef_HEAD_INIT,
    "foundation",        // m_name
    InterfaceModuleDoc,  // m_doc
    -1,                  // m_size
    nullptr,             // m_methods
    nullptr,             // m_slots
    nullptr,             // m_traverse
    nullptr,             // m_clear
    nullptr              // m_free
};

PyMODINIT_FUNC PyInit_foundation(void) {
    PyObject* m = PyModule_Create(&g_InterfaceModule);
    if (!m) {
        return nullptr;
    }
    PyObject* pyLog = GetLogModule();
    if (!pyLog) {
        PyErr_SetString(PyExc_ImportError, "Failed to create log submodule.");
        Py_DECREF(m);
        return nullptr;
    }
    Py_INCREF(pyLog);
    if (PyModule_AddObject(m, "log", pyLog) < 0) {
        PyErr_SetString(PyExc_ImportError, "Failed to add log submodule.");
        Py_DECREF(pyLog);
        Py_DECREF(m);
        return nullptr;
    }
    return m;
}
}  // namespace FOUNDATION