using Ropin.Inspection.Model;
using Ropin.Inspection.Service.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Ropin.Inspection.Service
{
    public interface ITprdProductService : IBaseService<TprdProductViewModel>, IBaseServiceById<TprdProductViewModel, Guid>
    {
        Task<TprdProductViewModel> GetAlertProductByCodeAsync(Guid code);
        Task<TprdProductViewModel> GetValiDateProductByCodeAsync(Guid code);
        Task<IEnumerable<TprdDeviceByAreaViewModel>> GetDeviceByAreaCode(TprdDeviceByAreaSearchModel searchModel);
        Task<IEnumerable<AllProductWithDevViewModel>> GetProductWithDataByAsync(TprdProductWithDataSearchModel searchModel);
        Task<TprdProductViewModel> GetProductByQRCodeAsync(string QRCode, string storeCode);
        Task<IEnumerable<TprdProductViewModel>> GetAllAsync();
        Task<IEnumerable<TprdProductViewModel>> GetByConditionAsync(Expression<Func<TprdProductViewModel, bool>> expression);
        Task UpdateAsync(Guid id, TprdProductUpdateModel updateModel);
        Task<IEnumerable<TprdProductViewModel>> GetConditionAsync(TprdProductSearchModel searchModel);
        Task<int> GetDeviceCountByAsync(string storeCode);
        Task<int> GetAlertDeviceCountByAsync(string storeCode);
        Task<IEnumerable<TprdProductViewModel>> GetAlertProductsByAsync(string storeCode);
        Task<IEnumerable<TprdProductViewModel>> GetValiDateProductsByAsync(string storeCode);
    }
}