using LifePayment.Application.Contracts;
using LifePayment.Domain;
using LifePayment.Domain.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Channels;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Z.EntityFramework.Plus;
using ZeroD.Util;

namespace LifePayment.Domain.Common
{
    public class ChannelFilter : AbstractChannelFilter
    {
        public override IQueryable<LifePayOrder> GetChannelLifePayOrderFilter(IQueryable<LifePayOrder> query)
        {
            if (CurrentUser.ClientId == Constant.ClientType.Back && !CurrentUser.IsSystem)
            {
                var queryUser = UserChannleRepository.Where(r => r.UserId == CurrentUser.Id).Select(s => s.ChannleId).ToList();
                var queryResult = query.Where(s => (!string.IsNullOrEmpty(s.ChannelId) && queryUser.Contains(s.ChannelId)) || string.IsNullOrEmpty(s.ChannelId));
                return queryResult;
            }

            return query;
        }

        public override IQueryable<LifePayUser> GetChannelLifePayUserFilter(IQueryable<LifePayUser> query)
        {
            if (CurrentUser.ClientId == Constant.ClientType.Back && !CurrentUser.IsSystem)
            {
                var queryUser = UserChannleRepository.Where(r => r.UserId == CurrentUser.Id).Select(s => s.ChannleId).ToList();
                var queryResult = query.Where(s => (!string.IsNullOrEmpty(s.CreationChannleNum) && queryUser.Contains(s.CreationChannleNum)) || string.IsNullOrEmpty(s.CreationChannleNum));
                return queryResult;
            }

            return query;
        }
    }

    public class ChannelsBase : Entity<Guid>
    {
        public Guid ChannleId { get; set; }

    }
}