using System.Data;
using JNPF.Common.Dtos.DataBase;
using JNPF.Common.Filter;
using JNPF.Common.Models.VisualDev;
using JNPF.Systems.Entitys.Dto.Database;
using JNPF.Systems.Entitys.Model.DataBase;
using JNPF.Systems.Entitys.System;
using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
using SqlSugar;
namespace JNPF.Common.Core.Manager;
///
/// 切换数据库抽象.
///
public interface IDataBaseManager
{
///
/// 获取多租户Link.
///
/// 租户ID.
/// 租户数据库.
/// 租户的DBLink实体对象.
DbLinkEntity GetTenantDbLink(string tenantId, string tenantName);
///
/// 数据库切换.
///
/// 数据连接.
/// 切库后的SqlSugarClient.
SqlSugarScope ChangeDataBase(DbLinkEntity link);
///
/// 执行Sql(查询).
///
/// 数据连接.
/// sql语句.
///
Task ExecuteSql(DbLinkEntity link, string strSql);
///
/// 条件动态过滤.
///
/// 数据连接.
/// sql语句.
/// 条件是否成立.
bool WhereDynamicFilter(DbLinkEntity link, string strSql);
///
/// 执行Sql(新增、修改).
///
/// 数据连接.
/// 表名.
/// 数据.
/// 主键字段.
///
Task ExecuteSql(DbLinkEntity link, string table, List> dicList, string primaryField = "");
///
/// 执行Sql 新增 并返回自增长Id.
///
/// 数据连接.
/// 表名.
/// 数据.
/// 主键字段.
///
Task ExecuteReturnIdentityAsync(DbLinkEntity link, string table, List> dicList, string primaryField = "");
///
/// 创建表.
///
/// 数据连接.
/// 表对象.
/// 字段对象.
///
Task Create(DbLinkEntity link, DbTableModel tableModel, List tableFieldList);
///
/// sqlsugar添加表字段.
///
/// 表名.
/// 表字段集合.
void AddTableColumn(DbLinkEntity link ,string tableName, List tableFieldList);
///
/// 删除表.
///
/// 数据连接.
/// 表名.
///
bool Delete(DbLinkEntity link, string table);
///
/// 修改表.
///
/// 数据连接.
/// 旧表名称.
/// 表对象.
/// 字段对象.
///
Task Update(DbLinkEntity link, string oldTable, DbTableModel tableModel, List tableFieldList);
///
/// 根据链接获取分页数据.
///
/// 数据连接.
/// Sql语句.
/// 页数.
/// 列配置.
/// 数据权限.
/// 输出列名称.
///
PageResult> GetInterFaceData(DbLinkEntity link, string strSql, VisualDevModelListQueryInput pageInput, MainBeltViceQueryModel columnDesign, List dataPermissions, Dictionary outColumnName = null);
///
/// 表是否存在.
///
/// 数据连接.
/// 表名.
///
bool IsAnyTable(DbLinkEntity link, string table);
///
/// 表是否存在数据.
///
/// 数据连接.
/// 表名.
///
bool IsAnyData(DbLinkEntity link, string table);
///
/// 表字段是否存在.
///
/// 数据连接.
/// 表名.
/// 表字段名.
///
bool IsAnyColumn(DbLinkEntity link, string table, string column);
///
/// 获取表字段列表.
///
/// 数据连接.
/// 表名.
///
List GetFieldList(DbLinkEntity? link, string? tableName);
///
/// 获取表数据.
///
/// 数据连接.
/// 表名.
///
DataTable GetData(DbLinkEntity link, string tableName);
///
/// 根据链接获取数据.
///
/// 数据连接.
/// Sql语句.
/// 参数.
///
DataTable GetInterFaceData(DbLinkEntity link, string strSql, params SugarParameter[] parameters);
///
/// 根据链接获取数据.
///
/// 数据连接.
/// sql语句.
/// 参数.
///
public DataTable GetInterFaceDataCopyNew(DbLinkEntity link, string strSql, params SugarParameter[] parameters);
///
/// 获取表信息.
///
/// 数据连接.
/// 表名.
///
DatabaseTableInfoOutput GetDataBaseTableInfo(DbLinkEntity link, string tableName);
///
/// 获取数据库表信息.
///
/// 数据连接.
///
List GetDBTableList(DbLinkEntity link);
///
/// 获取数据库表信息.
///
/// 数据连接.
///
List GetTableInfos(DbLinkEntity link);
///
/// 获取数据表分页(SQL语句).
///
/// 数据连接.
/// 数据SQL.
/// 页数.
/// 条数.
///
Task GetDataTablePage(DbLinkEntity link, string dbSql, int pageIndex, int pageSize);
///
/// 获取数据表分页(实体).
///
/// T.
/// 数据连接.
/// 页数.
/// 条数.
///
Task> GetDataTablePage(DbLinkEntity link, int pageIndex, int pageSize);
///
/// 使用存储过程.
///
/// 数据连接.
/// 存储过程名称.
/// 参数.
void UseStoredProcedure(DbLinkEntity link, string stored, List parameters);
///
/// 测试数据库连接.
///
/// 数据连接.
///
bool IsConnection(DbLinkEntity link);
///
/// 同步数据.
///
/// 数据连接.
/// 同步数据.
/// 表.
///
Task SyncData(DbLinkEntity link, DataTable dt, string table);
///
/// 同步表操作.
///
/// 原数据库.
/// 目前数据库.
/// 表名称.
/// 操作类型.
/// 数据类型.
void SyncTable(DbLinkEntity linkFrom, DbLinkEntity linkTo, string table, int type, Dictionary fieldType);
///
/// 视图数据类型转换.
///
/// 字段数据.
/// 数据库类型.
List ViewDataTypeConversion(List fields, SqlSugar.DbType databaseType);
///
/// 转换数据库类型.
///
/// 数据库类型.
///
SqlSugar.DbType ToDbType(string dbType);
///
/// 转换连接字符串.
///
/// 数据连接.
///
string ToConnectionString(DbLinkEntity dbLinkEntity);
///
/// 执行增删改sql.
///
/// 数据连接.
/// sql语句.
/// 参数.
void ExecuteCommand(DbLinkEntity link, string strSql, params SugarParameter[] parameters);
///
/// 获取表的主键
///
///
///
///
List GetPrimaries(DbLinkEntity? link, string tableName);
}