var path = require("path");
// 引入自定义的 DAO 模块，可能用于数据访问操作，具体功能取决于其内部实现
daoModule = require("./DAO");
// 引入位于 modules/database 目录下的数据库模块，使用 path.join 拼接当前工作目录与相对路径
databaseModule = require(path.join(process.cwd(), "modules/database"));


/**
 * 清除商品属性
 * 
 * @param {[type]} goods_id 商品的唯一标识符，用于确定要清除属性的商品
 * @param {Function} cb 回调函数，用于处理清除操作的结果
 * 当操作完成时，将调用此函数。若操作出现错误，第一个参数将包含错误信息；若操作成功，第一个参数为 null
 */
module.exports.clearGoodAttributes = function (goods_id, cb) {
    // 从数据库模块中获取数据库对象
    db = databaseModule.getDatabase();
    // 定义 SQL 语句，用于删除 sp_goods_attr 表中 goods_id 匹配的记录
    sql = "DELETE FROM sp_goods_attr WHERE goods_id =?";
    // 执行 SQL 查询操作，将 goods_id 作为参数传递给 SQL 语句
    database.driver.execQuery(
        sql
      , [goods_id], function (err) {
            // 如果执行查询时出现错误，调用回调函数并传递错误信息
            if (err) return cb("删除出错");
            // 若操作成功，调用回调函数，将第一个参数设为 null
            cb(null);
        });
}

/**
 * 查询商品属性列表
 * 
 * @param {[type]} goods_id 商品的唯一标识符，用于确定要查询属性的商品
 * @param {Function} cb 回调函数，用于处理查询操作的结果
 * 当操作完成时，将调用此函数。若操作出现错误，第一个参数将包含错误信息；若操作成功，第一个参数为 null，第二个参数为查询结果
 */
module.exports.list = function (goods_id, cb) {
    // 从数据库模块中获取数据库对象
    db = databaseModule.getDatabase();
    // 定义 SQL 语句，使用 LEFT JOIN 连接 sp_goods_attr 和 sp_attribute 表进行查询
    // 查询内容包括多个属性，从 sp_goods_attr 表中查询一些属性，从 sp_attribute 表中查询一些属性
    // 并根据 good_attr.goods_id 进行筛选
    sql = "SELECT good_attr.goods_id,good_attr.attr_id,good_attr.attr_value,good_attr.add_price,attr.attr_name,attr.attr_sel,attr.attr_write,attr.attr_vals FROM sp_goods_attr as good_attr LEFT JOIN sp_attribute as attr ON attr.attr_id = good_attr.attr_id WHERE good_attr.goods_id =?";
    // 执行 SQL 查询操作，将 goods_id 作为参数传递给 SQL 语句
    database.driver.execQuery(
        sql
      , [goods_id], function (err, attrs) {
            // 如果执行查询时出现错误，调用回调函数并传递错误信息
            if (err) return cb("删除出错");
            // 若操作成功，调用回调函数，将第一个参数设为 null，第二个参数为查询结果
            cb(null, attrs);
        });
}