#ifndef KYSDK_SYSTEM_SYSINFO_H__
#define KYSDK_SYSTEM_SYSINFO_H__

/**
 * @file libkysysinfo.h
 * @author liuyunhe (liuyunhe@kylinos.cn)
 * @brief 操作系统基础信息
 * @version 0.1
 * @date 2021-11-02
 * 
 * @copyright Copyright (c) 2021
 * 
 * @defgroup 获取系统基础信息
 * @{
 * 
 */

#include <string.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 获取操作系统架构信息
 * 
 * @return char* 成功返回字符串，失败返回NULL。返回的字符串需要被 free 释放
 */
extern char* kdk_system_get_architecture();

/**
 * @brief 获取操作系统名称
 * 
 * @return char* 成功返回字符串，失败返回NULL。返回的字符串需要被 free 释放
 */
extern char* kdk_system_get_systemName();

/**
 * @brief 获取操作系统版本号
 * 
 * @param verbose 0获取简略版本号，1获取详细版本号
 * @return char* 成功返回字符串，失败返回NULL。返回的字符串需要被 free 释放
 */
extern char* kdk_system_get_version(bool verbose);

/**
 * @brief 获取操作系统激活状态
 * 
 * @param status_error_num 用于接收激活状态的错误信息
 * @param date_error_num 用于接收获取技术服务状态错误信息
 * 
 * @return int 2表示已过期；0表示未激活，处于试用期；1表示已激活；-1表示接口内部错误；
 */
extern int kdk_system_get_activationStatus(int *status_error_num, int *date_error_num);

/**
 * @brief 获取操作系统服务序列号
 * 
 * @return char* 成功返回字符串，失败返回NULL。返回的字符串需要被 free 释放
 */
extern char* kdk_system_get_serialNumber();

/**
 * @brief 获取内核版本号
 * 
 * @return char* 成功返回字符串，失败返回NULL。返回的字符串需要被 free 释放
 */
extern char* kdk_system_get_kernelVersion();

/**
 * @brief 获取当前登录用户的用户名（Effect User）
 * 
 * @return char* 成功返回字符串，失败返回NULL。返回的字符串需要被 free 释放
 */
extern char* kdk_system_get_eUser();

/**
 * @brief 获取操作系统项目编号名
 * 
 * @return char* 成功返回字符串，失败返回NULL。返回的字符串需要被 free 释放
 */
extern char* kdk_system_get_projectName();

/**
 * @brief 获取操作系统宿主机的虚拟机类型
 * 
 * @return char* 获取失败返回NULL，获取成功返回一个字符串，字符串内容如下：
 *         [none, qemu, kvm, zvm, vmware, hyper-v, orcale virtualbox, xen, bochs, \
 *          uml, parallels, bhyve, qnx, arcn, openvz, lxc, lxc-libvirt, systemd-nspawn,\
 *          docker, podman, rkt, wsl]
 *         其中 none 表示运行在物理机环境中；其他字符串代表具体的虚拟环境类型。返回的字符串需要被 free 释放
 */
extern char* kdk_system_get_hostVirtType();

/**
 * @brief 获取操作系统宿主机的云平台类型
 * 
 * @return char* 获取失败返回NULL，获取成功返回一个字符串，字符串内容如下：
 *               [none, huawei]
 *               其中 none 表示运行在物理机或未知的云平台环境中；其他字符串代表不同的云平台。返回的字符串需要被 free 释放
 */
extern char* kdk_system_get_hostCloudPlatform();

/**
 * @brief  判断当前镜像系统是否为 专用机 系统
 * 
 * @return bool true代表是 false代表不是
 */

extern bool kdk_system_is_zyj(void);

#ifdef __cplusplus
}
#endif

#endif  // KYSDK_SYSTEM_SYSINFO_H__

/**
  * @}
  */