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

namespace Ropin.Inspection.Repository.DEV
{
    public class DevBoxRepository : RepositoryBase<TDEV_DevBox, string>, IDevBoxRepository
    {
        public DevBoxRepository(InspectionDbContext DbContext) : base(DbContext)
        {

        }
        public Task<bool> DeleteBYDevStoreCode(string devStoreCode)
        {
            MySqlConnector.MySqlParameter[] parameters = new[] { new MySqlConnector.MySqlParameter("devStoreCode", devStoreCode) };
            string sql = "DELETE FROM TDEV_DevBox where C_DevStoreCode=@devStoreCode ";
            int iResult = EntityFrameworkCoreExtensions.ExecuteSqlNoQuery(DbContext.Database, sql, parameters);
            return Task.FromResult(true);
        }
        public Task<IEnumerable<DevBoxViewModel>> GetConditionAsync(DevBoxSearchModel searchModel)
        {
            MySqlConnector.MySqlParameter[] parameters = new[] {
                new MySqlConnector.MySqlParameter("DevStoreCode", searchModel.C_DevStoreCode),
                new MySqlConnector.MySqlParameter("BoxCode", searchModel.C_BoxCode),
                new MySqlConnector.MySqlParameter("Id ", searchModel.C_ID)
            };
            StringBuilder sql = new StringBuilder();
            sql.Append(@"select * from (
select b.*,d.C_Name as C_BoxName,s.C_Name as C_DevStoreName
from TDEV_DevBox b
LEFT JOIN TDEV_Box d on (b.C_BoxCode=d.C_ID)
LEFT JOIN TDEV_DevStore s on (b.C_DevStoreCode=s.C_ID)
) tab where 1=1");
            if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))
            {
                sql.Append(" and C_DevStoreCode=@DevStoreCode ");
            }
            if (!string.IsNullOrEmpty(searchModel.C_BoxCode))
            {
                sql.Append(" and C_BoxCode=@BoxCode ");
            }
            if (!string.IsNullOrEmpty(searchModel.C_ID))
            {
                sql.Append(" and C_ID=@Id ");
            }
            sql.Append(" order by D_CreateOn desc ");

            IEnumerable<DevBoxViewModel> recordItemlist = EntityFrameworkCoreExtensions.GetList<DevBoxViewModel>(DbContext.Database, sql.ToString(), parameters);
            //searchModel.TotalCount = recordItemlist.First() != null ? recordItemlist.ToList().Count : 0;
            if (recordItemlist.Count() == 1 && recordItemlist.First() == null)
            {
                recordItemlist = null;
            }
            //return Task.FromResult(searchModel.IsPagination ? recordItemlist.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize) : recordItemlist);
            return Task.FromResult(recordItemlist);
        }
    }
}