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

namespace Ropin.Inspection.Service
{
    public class TsecRecordItemService : ITsecRecordItemService
    {
        private readonly ITsecRecordItemRepository _repository;
        private readonly ITsecRecordImageRepository _tsecRecordImageRepository;
        private readonly IMapper _mapper;
        private readonly IClaimsAccessor _claims;
        public TsecRecordItemService(IClaimsAccessor claims, ITsecRecordItemRepository repository, ITsecRecordImageRepository tispRecordImageRepository, IMapper mapper)
        {
            _repository = repository;
            _tsecRecordImageRepository = tispRecordImageRepository;
            _mapper = mapper;
            _claims = claims;
        }
        public async Task CreateSecurityRecordItemAsync(TsecRecordItemCreateViewModel item)
        {
            TsecRecordItemViewModel tsecRecord = new TsecRecordItemViewModel();
            tsecRecord.C_RecordItemCode = item.C_RecordItemCode;
            tsecRecord.C_SecurityContent = item.C_SecurityContent;
            tsecRecord.C_Remark = item.C_Remark;
            tsecRecord.C_Status = item.C_Status;

            TISP_SecurityItem recordItem = _mapper.Map<TISP_SecurityItem>(tsecRecord);
            recordItem.C_CreateBy = _claims.ApiUserId;
            recordItem.D_CreateOn = DateTime.Now;
            _repository.Create(recordItem);
            var result = await _repository.SaveAsync();
            if (!result)
            {
                throw new Exception("创建失败");
            }
            if (null != item.FilePaths && item.FilePaths.Count() > 0)
            {
                foreach (string imgPath in item.FilePaths)
                {
                    await _tsecRecordImageRepository.CreateOneAsync(new TISP_SecurityImage { C_SecurityRecordCode = tsecRecord.C_ID, C_ImageUrl = imgPath, C_Status = "1" });
                    var resultItemImage = await _repository.SaveAsync();
                    if (!resultItemImage)
                    {
                        throw new Exception("创建失败");
                    }
                }
            }


        }

        public async Task CreateSecurityRecordItemsAsync(IEnumerable<TsecRecordItemCreateViewModel> items)
        {
            foreach (var item in items)
            {
                //TsecRecordItemViewModel tsecRecord = new TsecRecordItemViewModel();
                //tsecRecord.C_ID = Guid.NewGuid();
                //tsecRecord.C_RecordItemCode = item.C_RecordItemCode;
                //tsecRecord.C_SecurityContent = item.C_SecurityContent;
                //tsecRecord.C_Remark = item.C_Remark;
                //tsecRecord.C_Status = "1";

                TISP_SecurityItem recordItem = new TISP_SecurityItem();
                recordItem.C_ID = Guid.NewGuid();
                recordItem.C_RecordItemCode = item.C_RecordItemCode;
                recordItem.C_SecurityContent = item.C_SecurityContent;
                recordItem.C_Remark = item.C_Remark;
                recordItem.C_Status = item.C_Status;
                recordItem.C_CreateBy = _claims.ApiUserId;
                recordItem.D_CreateOn = DateTime.Now;
                await _repository.CreateOneAsync(recordItem);
                var result = await _repository.SaveAsync();
                if (!result)
                {
                    throw new Exception("创建失败");
                }
                if (null != item.FilePaths && item.FilePaths.Count() > 0)
                {
                    foreach (string imgPath in item.FilePaths)
                    {
                        await _tsecRecordImageRepository.CreateOneAsync(new TISP_SecurityImage { C_SecurityRecordCode = recordItem.C_ID, C_ImageUrl = imgPath, C_Status = "1" });
                        var resultItemImage = await _repository.SaveAsync();
                        if (!resultItemImage)
                        {
                            throw new Exception("创建失败");
                        }
                    }
                }
            }
        }
        public async Task<IEnumerable<TsecRecordItemWithImagesViewModel>> GetSecurityRecordItemByIdAsync(Guid recordId)
        {
            var result = await _repository.GetSecurityRecordItemByIdAsync(recordId);
            return result;
        }
        public async Task<IEnumerable<TsecRecordItemDetailViewModel>> GetSecurityRecordItemsAsync(TsecRecordItemsSearchModel searchModel)
        {
            //if (string.IsNullOrEmpty(searchModel.OrganizeCode))
            //{
            //    searchModel.OrganizeCode = _claims.OrganizeId.ToString();
            //}
            var result = await _repository.GetSecurityRecordItemsAsync(searchModel);
            return result;
        }
        public Task CreateOneAsync(TsecRecordItemViewModel viewModel)
        {
            throw new NotImplementedException();
        }

        public Task DeleteAsync(Guid id)
        {
            throw new NotImplementedException();
        }

        public Task<TsecRecordItemViewModel> GetByIdAsync(Guid id)
        {
            throw new NotImplementedException();
        }

        public Task<bool> IsExistAsync(Guid id)
        {
            throw new NotImplementedException();
        }

        public Task<int> UpdateOneAsync(TsecRecordItemViewModel viewModel, params string[] fields)
        {
            throw new NotImplementedException();
        }
    }
}