using Ropin.Inspection.Model.SearchModel;
using Ropin.Inspection.Model.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Ropin.Inspection.Service.Interface
{
    public interface ITispRecordService : IBaseService<TispRecordViewModel>, IBaseServiceById<TispRecordViewModel, Guid>
    {
        Task<IEnumerable<TispRecordViewModel>> GetAllAsync(string storeCode);
        Task<IEnumerable<TispRecordViewModel>> GetByConditionAsync(Expression<Func<TispRecordViewModel, bool>> expression);
        Task UpdateAsync(Guid id, TispRecordUpdateViewModel updateModel);
        Task CreateRecordAndImageAsync(IEnumerable<TispRecordViewModel> records);
        Task CreateRecordAsync(TispRecordCreateViewModel record);
        Task<TispRecordViewModel> GetRecordAsync(Guid id);
        Task<IEnumerable<TispRecordDetailViewModel>> GetRecordsConditionAsync(TispRecordSearchModel searchModel);
        Task<IEnumerable<AllSpotRecordWithDevViewModel>> GetAllSpotRecordAsync(AllSpotRecordSearchModel searchModel);
        Task<IEnumerable<AllSpotRecordViewModel>> GetUserSpotRecordAsync(UserSpotRecordSearchModel searchModel);
        Task<int> GetUserTodaySpotRecordCountAsync(Guid id, string storeCode);
        Task<int> GetUserTodayNotSpotRecordCountAsync(Guid id, string storeCode);
        Task<IEnumerable<AllSpotRecordViewModel>> GetUserTodaySpotRecordsAsync(Guid id, string storeCode);
        Task<IEnumerable<AllSpotRecordViewModel>> GetUserTodayNotSpotRecordsAsync(Guid id,string storeCode);
        Task<TispRecord30DaysStatisticsViewModel> GetRecords30DaysStatisticsAsync(string storeCode);
        Task<TispAlarmRecovery7DaysStatisticsViewModel> GetAlarmRecovery7DaysStatisticsAsync(string storeCode);
        Task<TodaySpotStatistics> GetTodaySpotStatisticsAsync(string storeCode);
        Task<TodaySpotContentStatistics> GetTodaySpotContentStatisticsAsync(string storeCode);
        Task<Record12MonthStatisticsViewModel> GetRecord12MonthStatisticsAsync(string storeCode);
        Task<IEnumerable<FullScreenRecordItem>> GetRecord12MonthStatisticsFullScreenAsync(string storeCode);
        Task<IEnumerable<FullScreenRecordItem>> GetAllDevOpsRecord12MonthStatisticsFullScreenAsync(string storeCode);
    }
}