#pragma once
#include "DaoEntity.h"
#include "DataModelDef.h"
#include "errcode.h"

class DAO
{
public:
    static std::string sqlPageLimit(int index, int size);

    static Errcode count(DaoEntity& dao, std::string tableName, std::string condition, int& count);

    static Errcode exec(std::shared_ptr<DaoEntity> dao, std::string sql);
    static Errcode exec(std::shared_ptr<DaoEntity> dao, std::string sql, vector<Fields>& result);
    static Errcode query(std::shared_ptr<DaoEntity> dao, std::string tableName, std::vector<std::string> keys, std::string condition);
    static Errcode queryPagination(std::shared_ptr<DaoEntity> dao, std::string tableName, std::vector<std::string> keys, std::string condition);
    static Errcode insert(std::shared_ptr<DaoEntity> dao, std::string tableName, Fields params);
    static Errcode update(std::shared_ptr<DaoEntity> dao, std::string tableName, Fields params, std::string primaryKey);
    static Errcode remove(std::shared_ptr<DaoEntity> dao, std::string tableName, std::string primaryKey, std::string val);

    static Errcode login(std::shared_ptr<DaoEntity> dao, std::string account, std::string passwd, Fields& fields);

    static Errcode queryRolePermission(std::shared_ptr<DaoEntity> dao, int roleId, vector<Fields>& result);
    static Errcode queryRolePermission(std::shared_ptr<DaoEntity> dao, vector<Fields>& result);

    // 查询用户列表（分页）
    static Errcode queryUserList(PageInfo& pageInfo, vector<Fields>& result);

    // 新增用户
    static Errcode insertUser(Fields& params);
    // 更新用户
    static Errcode updateUserById(Fields& params);
    // 删除用户
    static Errcode deleteUserById(std::string userId);


    // 查询权限信息列表（分页）
    static Errcode queryPermissionList(PageInfo& pageInfo, vector<Fields>& result);
    // 新增权限
    static Errcode insertPermission(Fields& params);
    // 更新权限
    static Errcode updatePermissionById(Fields& params);
    // 删除权限
    static Errcode deletePermissionById(std::string userId);


    static Errcode updateRolePermission(std::shared_ptr<DaoEntity> dao, std::string roleId, vector<Fields>& vecFields);

    // 查询角色列表（分页）
    static Errcode queryRoleList(PageInfo& pageInfo, vector<Fields>& result);

    // 查询角色列表
    static Errcode queryRoleList(std::shared_ptr<DaoEntity> dao, vector<Fields>& result);
    // 新增角色
    static Errcode insertRole(Fields& params);
    // 更新角色
    static Errcode updateRoleById(std::shared_ptr<DaoEntity> dao, Fields& params);
    // 删除角色
    static Errcode deleteRoleById(std::string userId);



    // 查询场站信息列表（分页）
    static Errcode queryStationList(PageInfo& pageInfo, vector<Fields>& result);

    // 查询场站信息列表
    static Errcode queryStationList(std::shared_ptr<DaoEntity> dao, vector<Fields>& result);
    // 新增场站信息
    static Errcode insertStation(Fields& params);
    // 更新场站信息
    static Errcode updateStationById(Fields& params);


    
    // 查询设备信息列表（分页）
    static Errcode queryDeviceList(PageInfo& pageInfo, vector<Fields>& result);
    // 查询设备信息列表（分页）
    static Errcode queryDeviceListByStation(PageInfo& pageInfo, string stationId, vector<Fields>& result);
    // 查询设备信息列表
    static Errcode queryDeviceList(std::shared_ptr<DaoEntity> dao, vector<Fields>& result, bool sort=false);
    // 查询设备类型定义
    static Errcode queryDeviceTypeDef(std::shared_ptr<DaoEntity> dao, vector<Fields>& result);
    // 新增设备信息
    static Errcode insertDevice(Fields& params);
    // 更新设备信息
    static Errcode updateDeviceById(Fields& params);

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // === 策略管理 ===
    // 分页查询策略信息列表
    static Errcode queryPolicyList(PageInfo& pageInfo, vector<Fields>& result);

    static Errcode queryPolicyList(std::shared_ptr<DaoEntity> dao, vector<Fields>& result);
    
    static Errcode insertPolicy(Fields& params);
    static Errcode updatePolicyById(Fields& params);
    static Errcode deletePolicyById(std::string policyId);

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // === 系统日志管理 ===
    // 分页查询系统日志列表
    static Errcode querySystemLogList(PageInfo& pageInfo, vector<Fields>& result);
    static Errcode insertSystemLog(Fields& params);
    static Errcode updateSystemLogById(Fields& params);

    static Errcode insertSystemLogSys(std::string content, int status);
    static Errcode insertSystemLogUser(std::string token, std::string content, int status);
    static Errcode insertSystemLogDevice(int stationId, int deviceId, std::string content, int status);

    static Errcode queryAlertLogList(PageInfo& pageInfo, vector<Fields>& result);
    static Errcode insertAlertLog(Fields& params);
    static Errcode updateAlertLogById(Fields& params);

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // === 统计数据管理 ===
    static Errcode queryStatDataList(std::shared_ptr<DaoEntity> dao, std::string startDate, std::string endDate, vector<Fields>& result);
    static Errcode queryStatStationGroup(std::shared_ptr<DaoEntity> dao, string stationId, string category, string startDate, string endDate, vector<Fields>& result);
    static Errcode queryStatStationList(PageInfo& pageInfo, Fields& params, vector<Fields>& result);
    static Errcode queryWorkModeDef(std::shared_ptr<DaoEntity> dao, vector<Fields>& result);
    static Errcode queryPolicyTypeDef(std::shared_ptr<DaoEntity> dao, vector<Fields>& result);
    static Errcode insertStatDay(std::shared_ptr<DaoEntity> dao, Fields& fields);


    ///////////////////////////////////////////////////////////////////////////////////////////////
    // === 设备历史监测数据管理 ===
    static Errcode insertRuntimeData(std::shared_ptr<DaoEntity> dao, Fields& fields);
    static Errcode queryRuntimeData(std::shared_ptr<DaoEntity> dao, std::string dt, int stationId, int deviceId, vector<Fields>& result);
    static Errcode queryRuntimeDataHistory(std::shared_ptr<DaoEntity> dao, std::string dt, vector<Fields>& result);

    static Errcode queryPredictHistory(std::shared_ptr<DaoEntity> dao, std::string dt, vector<Fields>& result);
};