using AutoMapper;
using LinqKit;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.NodeServices;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Ropin.Core.Common;
using Ropin.Inspection.Common;
using Ropin.Inspection.Common.Accessor.Interface;
using Ropin.Inspection.Common.Helper;
using Ropin.Inspection.Model;
using Ropin.Inspection.Model.Entities;
using Ropin.Inspection.Repository;
using Ropin.Inspection.Repository.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using static System.Net.Mime.MediaTypeNames;

namespace Ropin.Inspection.Service
{
    public class TdevDevStoreMigrateService : ITdevDevStoreMigrateService
    {
        private readonly ITdevDevStoreMigrateRepository _repository;
        private readonly IMapper _mapper;
        private readonly IClaimsAccessor _claims;
        private readonly InspectionDbContext _sqlDBContext;
        private readonly ITmtnDevOpsRecordRepository _tmtnDevOpsRecordRepository;
        private readonly ITdevDevStoreRepository _tdevDevStoreRepository;
        public TdevDevStoreMigrateService(ITmtnDevOpsRecordRepository tmtnDevOpsRecordRepository,IClaimsAccessor claims, InspectionDbContext sqlDBContext, ITdevDevStoreMigrateRepository repository, IMapper mapper, ITdevDevStoreRepository tdevDevStoreRepository)
        {
            _repository = repository;
            _mapper = mapper;
            _claims = claims;
            _sqlDBContext = sqlDBContext;
            _tmtnDevOpsRecordRepository = tmtnDevOpsRecordRepository;
            _tdevDevStoreRepository = tdevDevStoreRepository;
        }

        public async Task CreateOneAsync(TdevDevStoreMigrateViewModel viewModel)
        {
            var id = Guid.NewGuid().ToString();
            var content = _mapper.Map<TDEV_DevStoreMigrate>(viewModel);
            var devStore= await _tdevDevStoreRepository.GetByIdAsync(viewModel.C_DevStoreCode);
            if (devStore == null)
            {
                throw new Exception("创建失败,没有找到要移机的设备");
            }
            devStore.C_StoreCode = viewModel.C_CurrentStoreCode;
            _tdevDevStoreRepository.Update(devStore);
            content.C_ID = id;
            content.C_CreateBy = _claims.ApiUserId;
            content.D_CreateOn = DateTime.Now;
            _repository.Create(content);
            var result = await _repository.SaveAsync();
            if (!result)
            {
                throw new Exception("创建失败");
            }
        }

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

        public Task<TdevDevStoreMigrateViewModel> GetByIdAsync(string id)
        {
            throw new NotImplementedException();
        }

        public async Task<IEnumerable<TdevDevStoreMigrateViewModel>> GetConditionAsync(TdevDevStoreMigrateSearchModel searchModel)
        {
            var dtoList = await _repository.GetDevStoreMigrateList(searchModel);
            return dtoList;
        }

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

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