using Ropin.Inspection.Model.Entities;
using Ropin.Inspection.Model.SearchModel;
using Ropin.Inspection.Model.ViewModel;
using Ropin.Inspection.Repository.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ropin.Inspection.Repository
{
    public class ReportRepository : RepositoryBase<TISP_Report, Guid>, IReportRepository
    {
        public ReportRepository(InspectionDbContext dbContext) : base(dbContext)
        {

        }
        public Task<IEnumerable<ReportViewModel>> GetWithoutReportData(ReportSearchModel searchModel)
        {
            MySqlConnector.MySqlParameter[] parameters = new[] {
                new MySqlConnector.MySqlParameter("id", searchModel.Id),
                new MySqlConnector.MySqlParameter("StoreCode", searchModel.StoreCode),
                new MySqlConnector.MySqlParameter("start", searchModel.Start), 
                new MySqlConnector.MySqlParameter("end", searchModel.End),
                new MySqlConnector.MySqlParameter("name ", searchModel.C_Name), 
                new MySqlConnector.MySqlParameter("type", searchModel.I_Type),
                new MySqlConnector.MySqlParameter("groupName ", searchModel.C_GroupName) }; 
            string sql = @"select * from (
SELECT R.G_ID,R.C_Name,R.C_StoreCode,D.C_Name as C_DevName,D.C_NumberCode as C_DevNumber,R.I_Type,R.C_GroupName,R.D_CreateTime,R.C_Remark,R.D_Start,R.D_End,R.C_Status 
FROM TISP_Report R
LEFT JOIN TDEV_DevStore D on (R.C_DevStoreCode=D.C_ID)
) tab WHERE C_Status = '1' ";
            if (!string.IsNullOrEmpty(searchModel.C_Name))
            {
                sql += " AND  C_Name = @name";
            }
            if (searchModel.I_Type != 0)
            {
                sql += " AND I_Type = @type";
            }
            if (!string.IsNullOrEmpty(searchModel.C_GroupName))
            {
                sql += " AND C_GroupName = @groupName";
            }
            if (!string.IsNullOrEmpty(searchModel.StoreCode))
            {
                sql += "   AND C_StoreCode = @StoreCode ";
            }
            if (searchModel.End!=DateTimeOffset.MinValue&&searchModel.Start!= DateTimeOffset.MinValue)
            {
                sql += " AND  D_CreateTime between @start and @end";
            }
            if (!string.IsNullOrEmpty(searchModel.Id))
            {
                sql += " AND G_ID = @id";
            }
            sql += " ORDER BY D_CreateTime DESC";
            IEnumerable<ReportViewModel> list = EntityFrameworkCoreExtensions.GetList<ReportViewModel>(DbContext.Database, sql, parameters);
            searchModel.TotalCount = list.First() != null ? list.ToList().Count : 0;
            return Task.FromResult(searchModel.IsPagination ? list.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize) : list);

        }
    }
}