using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using XF.Domain.Entities;

namespace XF.Domain.Repository
{
    //public interface IRepositoryWorkflow<TEntity, TKey> : IRepositorySqlSugar<TEntity, TKey>
    //    where TEntity : class, IEntity<string>, new()
    //    where TKey : IEquatable<TKey>
    //{
    //    ISugarQueryable<TEntity> Queryable(bool permissionVerify = false, bool includeDeleted = false, bool workflowFilter = true);
    //}

    //public interface IRepositoryWorkflow<TEntity> : IRepositoryWorkflow<TEntity, string> where TEntity : class, IEntity<string>, new()
    //{
    //}

    public interface IRepositoryWorkflow<TEntity> : IRepositorySqlSugar<TEntity> where TEntity : class, IEntity<string>, new()
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="permissionVerify"></param>
        /// <param name="includeDeleted"></param>
        /// <param name="canView">是否可查看</param>
        /// <param name="hasHandled">是否已办理，null: 不过滤</param>
        /// <param name="isAdmin">是否是管理员</param>
        /// <returns></returns>
        ISugarQueryable<TEntity> Queryable(bool permissionVerify = false, bool includeDeleted = false, bool canView = false, bool? hasHandled = null, bool? isAdmin = false, bool? hasHandledStep = null);
    }
}
