using System.Threading.Tasks;
using BLL.Interfaces;
using MDL.DTOs;

namespace BLL.Services
{
    public class TagTriggerService : ITagTriggerService
    {
        private readonly ITagInstanceService _tagInstanceService;
        private readonly ITagTemplateService _tagTemplateService;
        private readonly ILabelScanService _labelScanService;

        public TagTriggerService(ITagInstanceService tagInstanceService, ITagTemplateService tagTemplateService, ILabelScanService labelScanService)
        {
            _tagInstanceService = tagInstanceService;
            _tagTemplateService = tagTemplateService;
            _labelScanService = labelScanService;
        }

        public async Task<bool> CheckTriggerAsync(TriggerCheckDTO dto)
        {
            // 这里实现触发条件检查逻辑
            // 例如：检查扫描时间是否满足触发条件
            // 实际实现需要根据具体的业务规则来判断
            
            try
            {
                // 获取该运单号的所有扫描记录
                var scanRecords = await _labelScanService.GetScanRecordsByNeutralWaybillNumberAsync(dto.ScanCode);
                
                if (scanRecords != null && scanRecords.Count > 0)
                {
                    // 找到第一次扫描记录（按创建时间排序）
                    var firstScan = scanRecords.OrderBy(s => s.CreatedAt).FirstOrDefault();
                    
                    if (firstScan != null)
                    {
                        // 检查第一次扫描记录的结果是否为NoOrderData（枚举值为2）
                        if (firstScan.Result == MDL.Models.ScanResult.NoOrderData|| firstScan.Result == MDL.Models.ScanResult.NoLabelData)
                        {
                            // 计算第一次扫描时间T
                            var firstScanTime = firstScan.CreatedAt;
                            
                            // 计算T+5天的截止时间（精确到当天23:59:59）
                            var cutoffTime = firstScanTime.Date.AddDays(5).AddHours(23).AddMinutes(59).AddSeconds(59);
                            
                            // 检查当前时间是否超过截止时间
                            if (dto.ScanTime > cutoffTime && string.IsNullOrWhiteSpace(dto.Label))
                            {
                                return true;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // 异常处理：记录日志但不影响主流程
                Console.WriteLine($"Error checking trigger condition: {ex.Message}");
            }
            
            // 默认不触发标签
            return false;
        }

        public async Task<TagInstanceDTO> TriggerTagAsync(CreateTagInstanceDTO dto)
        {
            // 创建标签实例
            var instance = await _tagInstanceService.CreateInstanceAsync(dto);
            
            // 这里可以添加其他触发相关的逻辑
            // 例如：发送通知、记录日志等
            
            return instance;
        }
    }
}
