using Newtonsoft.Json;
using Quartz;
using Ropin.Inspection.Common.Helper;
using Ropin.Inspection.Model.SearchModel;
using Ropin.Inspection.Model.ViewModel;
using Ropin.Inspection.Service.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ropin.Inspection.Tasks.QuartzNet.Jobs
{
    public class Job_InspectionWorkOrder_Quartz : JobBase, IJob
    {
        private readonly ITispRecordItemService _tispRecordItemService;
        private readonly IReportService _reportService;
        private readonly ITispContentGroupService _tispContentGroupService;

        public Job_InspectionWorkOrder_Quartz(ITispRecordItemService tispRecordItemService, IReportService reportService, ITasksQzServices tasksQzServices, ITispContentGroupService tispContentGroupService)
        {
            _tispRecordItemService = tispRecordItemService;
            _tasksQzServices = tasksQzServices;
            _reportService = reportService;
            _tispContentGroupService = tispContentGroupService;
        }
        public async Task Execute(IJobExecutionContext context)
        {
            var executeLog = await ExecuteJob(context, async () => await Run(context));
        }
        public async Task Run(IJobExecutionContext context)
        {
            JobDataMap data = context.JobDetail.JobDataMap;
            string storeCode = data.GetString("JobParam");
            DateTime beginDate;//=Convert.ToDateTime("2025-02-07 00:00:00");
            DateTime endDate;//=Convert.ToDateTime("2025-03-20 00:00:00");
            DateHelper.GetPeriod(DateHelper.Period.Week, out beginDate, out endDate);
            TispContentGroupsSearchModel searchModel = new TispContentGroupsSearchModel();
            searchModel.C_StoreCode = storeCode;
            var list = await _tispContentGroupService.GetContentGroupsAsync(searchModel);
            if (list!=null)
            {
                var rows = list.GroupBy(item =>new { item.C_DevStoreCode,item.C_DevName }).ToList();
                foreach (var item in rows)
                {
                    if (item!=null)
                    {
                        var l = await _tispRecordItemService.GetInspectionWorkOrderAsync(beginDate, endDate, storeCode, item.Key.C_DevStoreCode);
                        ReportViewModel reportViewModel = new ReportViewModel
                        {
                            G_ID = Guid.NewGuid(),
                            C_StoreCode = storeCode,
                            C_DevStoreCode = item.Key.C_DevStoreCode,
                            I_Type = 5,
                            C_GroupName = "点检工单记录",
                            C_Name = item.Key.C_DevName + "点检工单记录" + "(" + DateTime.Now.AddDays(1).ToString("yyyy/MM/dd HH:mm") + ")",
                            C_Status = "1",
                            D_CreateTime = DateTime.Parse(DateTime.Now.AddDays(1).ToString("yyyy/MM/dd HH:mm")),
                            D_Start = beginDate,
                            D_End = endDate,
                            C_Data = JsonConvert.SerializeObject(l)
                        };
                        await _reportService.CreateOneAsync(reportViewModel);
                    }
                }
            }
        }
    }
}