#include "deviceAPI.h"


/**
 * @brief   设备是否已经认证
 * @param   void
 * @return  设备认证状态
 *  - true  已认证
 *  - false 未认证
 * @author  柯劲帆
 * @date    2024-07-28
 */
bool Device::is_verified()
{
    return verified;
}


/**
 * @brief   设备是否可充值
 * @param   void
 * @return  设备充值权限
 *  - true  可充值
 *  - false 不可充值（仅可消费）
 * @author  柯劲帆
 * @date    2024-07-29
 */
bool Device::is_depositAllowed()
{
    return depositAllowed;
}


/**
 * @brief   设置并认证设备
 *  认证设备会更新设备名、充值权限和设备ID。
 * @param   name    设备名
 * @param   db  数据库
 * @return  void
 * @author  柯劲帆
 * @date    2024-07-28
 */
void Device::setDevice(QString name, Database* db)
{
    QSqlQuery query(db->getDatabase());
    query.prepare(QString("select id, depositAllowed from device "
                          "where name = :name;"));
    query.bindValue(":name", name);
    query.exec();
    if (query.next())
    {
        verified = true;
        this->name = name;
        depositAllowed = query.value("depositAllowed").toBool();
        id = query.value("id").toInt();
    }
    else
    {
        verified = false;
        depositAllowed = false;
        id = -1;
    }
}


/**
 * @brief   获取设备名及其充值权限
 * @param   void
 * @return  QString 设备名及其充值权限
 *  - 若设备未认证返回"未指定设备名"
 *  - 若设备已认证
 *      - 若设备可充值，返回设备名加"（可充值）"
 *      - 若设备不可充值，返回设备名加"（仅可消费）
 * @author  柯劲帆
 * @date    2024-07-28
 */
QString Device::getNameAndDepositAllowed()
{
    if (verified) {
        if (depositAllowed) return name + QString("（可充值）");
        else return name + QString("（仅可消费）");
    }
    else return QString("未指定设备名");
}


/**
 * @brief   获取设备名
 * @param   void
 * @return  QString 设备名（name属性）
 * - 若设备未认证返回"未指定设备名"
 * - 若设备已认证返回设备名
 * @author  柯劲帆
 * @date    2024-07-29
 */
QString Device::getName()
{
    if (verified) return name;
    else return QString("未指定设备名");
}


/**
 * @brief   获取设备ID
 * @param   void
 * @return  int 设备ID
 * - 若设备未认证返回-1
 * - 若设备已认证返回设备ID
 * @author  柯劲帆
 * @date    2024-07-30
 */
int Device::getId()
{
    if (verified) return id;
    else return -1;
}
