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

namespace Ropin.Inspection.Repository
{
    public class TdevDevStoreDocRepository : RepositoryBase<TDEV_DevStoreDoc, string>, ITdevDevStoreDocRepository
    {
        public TdevDevStoreDocRepository(InspectionDbContext DbContext) : base(DbContext)
        {

        }
        /// <summary>
        /// 获取设备文档(包括关联的模板文档)
        /// </summary>
        /// <param name="searchModel"></param>
        /// <returns></returns>
        public Task<IEnumerable<TdevDevStoreDocViewModel>> GetDevFile(TdevDevStoreDocSearchModel searchModel)
        {
            MySqlConnector.MySqlParameter[] parameters = new[] {
                new MySqlConnector.MySqlParameter("Status", searchModel.C_Status),
                new MySqlConnector.MySqlParameter("name",  "%"+searchModel.C_Name+"%"),
                new MySqlConnector.MySqlParameter("devStoreCode", searchModel.C_DevStoreCode),
                new MySqlConnector.MySqlParameter("Id ", searchModel.C_ID)
            };
            StringBuilder sql = new StringBuilder();
            sql.Append(@"select * from (
select C_ID,C_Name,C_DevStoreCode,C_Type,C_Url,C_Remark,C_CreateBy,D_CreateOn,C_Status from TDEV_DevStoreDoc
union
select * from (
select C_ID,C_Name,@devStoreCode as C_DevStoreCode,C_Type,C_Url,C_Remark,C_CreateBy,D_CreateOn,C_Status from TDEV_DeviceTempArchives
where C_DevTempCode in (
select  C_DevTempCode as id from  TDEV_DevStore  where C_ID =@devStoreCode
union 
select  C_OpsTempCode as id from  TDEV_DevStore  where C_ID =@devStoreCode
union
select  C_RepairTempCode as id from  TDEV_DevStore  where C_ID =@devStoreCode
union
select  C_RunTempCode as id from  TDEV_DevStore  where C_ID =@devStoreCode
)) tab)tabs
where C_DevStoreCode=@devStoreCode");

            if (!string.IsNullOrEmpty(searchModel.C_Status))
            {
                sql.Append(" and C_Status=@Status ");
            }
            else
            {
                sql.Append(" and C_Status!='0' ");
            }
            if (!string.IsNullOrEmpty(searchModel.C_Name))
            {
                sql.Append(" and C_Name like @name");
            }
            if (searchModel.IdList!=null&& searchModel.IdList.Count>0)
            {
                string idJoin=string.Join("','", searchModel.IdList);
                sql.Append($" and C_ID in ('{idJoin}') ");
            }
            if (!string.IsNullOrEmpty(searchModel.C_ID))
            {
                sql.Append(" and C_ID=@Id ");
            }
            sql.Append(" order by C_Name asc,D_CreateOn desc ");
            IEnumerable<TdevDevStoreDocViewModel> recordItemlist = EntityFrameworkCoreExtensions.GetList<TdevDevStoreDocViewModel>(DbContext.Database, sql.ToString(), parameters);
            searchModel.TotalCount = recordItemlist.First() != null ? recordItemlist.ToList().Count : 0;
            return Task.FromResult(searchModel.IsPagination ? recordItemlist.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize) : recordItemlist);
        }

    }
}