using APT.BaseData.Domain.Entities;
using APT.BaseData.Domain.Enums;
using APT.Infrastructure.Core;
using APT.BaseData.Domain.ApiModel;
using System;
using System.Collections.Generic;
using APT.Infrastructure.Api;
namespace APT.BaseData.Domain.IServices.EX
{
    public interface IEntityOperateService : ICommonService
    {
        /// <summary>
        /// 获取实体字段信息
        /// </summary>
        /// <param name="entityName"></param>
        /// <param name="isOnlyBaseType">仅获取基础类型</param>
        /// <returns></returns>
        List<EntityFieldModel> GetEntityFields(string entityName, bool isOnlyBaseType);


        /// <summary>
        /// 根据表名获取实体查询字段信息
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="fieldNamePrefix">字段前缀</param>
        /// <param name="lablePrefix">显示名称前缀</param>
        /// <param name="expandFields">展开字段列表</param>
        /// <returns></returns>
        List<EntityFieldByQueryFieldModel> GetEntityFieldsByTableName(string tableName, string fieldNamePrefix, string lablePrefix, List<string> expandFields);


        /// <summary>
        /// 根据查询表ID获取实体查询字段信息
        /// </summary>
        /// <param name="formId">查询表单ID</param>
        /// <param name="code">查询字段CODE</param>
        /// <param name="fieldNamePrefix">字段前缀</param>
        /// <param name="lablePrefix">显示名称前缀</param>
        /// <param name="expandFields">展开字段列表</param>
        /// <returns></returns>
        List<EntityFieldByQueryFieldModel> GetEntityFieldsByQueryFormId(Guid formId, string code, string fieldNamePrefix, string lablePrefix, List<string> expandFields, BaseFilter filter);


        /// <summary>
        /// 根据表名初始化表单配置
        /// </summary>
        /// <param name="orgId"></param>
        /// <param name="tableName"></param>
        /// <param name="userId"></param>
        /// <param name="configType"></param>
        void InitFormConfigByName(Guid orgId, string tableName, Guid? userId,
            PFInitFormConfigTypeEnum configType, Guid? menuParentId,
                string menuName, string menuIcon, bool isAddSend = false);

    }
}
