using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Assets.Logging;
using Palmmedia.ReportGenerator.Core.Logging;
using sl;
using static ZEDManager;

namespace Assets.ZED.SDK.Helpers.Scripts
{
    internal class LoggingZEDManager : IZEDManager
    {
        readonly ZEDManager zedManager;
        readonly ILogger<DetectionFrame> detectionFrameLogger;

        public LoggingZEDManager(ZEDManager zedManager, ILogger<DetectionFrame> detectionFrameLogger)
        {
            this.zedManager = zedManager;
            this.detectionFrameLogger = detectionFrameLogger;
            zedManager.OnObjectDetection += ZedManager_OnObjectDetection;
        }

        void ZedManager_OnObjectDetection(DetectionFrame objFrame)
        {
            detectionFrameLogger.Log(objFrame);
        }

        public bool IsObjectDetectionRunning => zedManager.IsObjectDetectionRunning;

        public bool EstimateInitialPosition => zedManager.EstimateInitialPosition;

        public DETECTION_MODEL ObjectDetectionModel => zedManager.ObjectDetectionModel;

        public event ZEDManager.onNewDetectionTriggerDelegate OnObjectDetection
        {
            add => zedManager.OnObjectDetection += value;
            remove => zedManager.OnObjectDetection -= value;
        }

        public event ZEDManager.OnZEDManagerReady OnZEDReady
        {
            add => zedManager.OnZEDReady += value;
            remove => zedManager.OnZEDReady -= value;
        }

        public void StartObjectDetection()
        {
            zedManager.StartObjectDetection();
        }
    }
}