using SqlSugar;
using System;
using System.Collections.Generic;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
using System.Linq;
using System.Data;
using System.Text.RegularExpressions;
using System.Collections;
using ReZero.DependencyInjection;
namespace ReZero.SuperAPI
{
    /// <summary>
    /// ToList
    /// </summary>
    public partial class QueryCommon : IDataService
    {
        private  async Task<object?> ToList(DataModel dataModel, RefAsync<int> count, Type type, QueryMethodInfo queryObject)
        {
            object? result = null;
            if (IsDefaultToList(dataModel))
            {
                result = await DefaultQuery(queryObject, result);
                if (dataModel.ApiId == InterfaceListInitializerProvider.IntIntListId) 
                {
                    var userName = DependencyResolver.GetLoggedInUser();
                    var list = CacheManager<ZeroPermissionInfo>.Instance.GetList();
                    if (list.Any())
                    {
                        var mappings = CacheManager<ZeroPermissionMapping>.Instance.GetList()
                            .Where(it => it.UserName!.ToLower() == userName?.ToLower())
                            .ToList();
                        var ids = mappings.Select(it => it.InterfaceId).ToList();
                        result = (result as IList).Cast<object>()
                            .Where(it=> ids.Contains(Convert.ToInt64(it.GetType().GetProperty(nameof(ZeroInterfaceList.Id)).GetValue(it)))).ToList();
                    }
                } 
            }
            else
            {
                result = await PageQuery(dataModel, count, type, queryObject, result);

            }
            return result;
        }
    }
}