using System;
using System.Collections.Generic;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Net;

namespace Timelapse.Api
{
   
    public abstract class TimelapseExtension
    {
        internal string __id;
        internal bool _recording;
        internal bool _onex;
        protected bool Recording {get {return _recording;}set{if(value){StartRecording();} else{StopRecording();}}}
         protected bool OneX {get {return _onex;}set{if(value) {EnableOneX();} else {DisableOneX();} }}
        public abstract void OnInit();
        public string Name {get;internal set;}
        public virtual async Task OnNewFrame(Image<Rgb24> frame)
        {
            
        }
        public virtual void OnLoadProject(TimelapseProject project)
        {

        }
        ///<summary>
        ///URL for in html pages
        ///</summary>
        public string GET_URL(string href)
        {
            return $"/api/Extension/GetExtensionPage?extId={WebUtility.UrlEncode(__id)}&subPage={WebUtility.UrlEncode(href)}";
        }
        protected string GetExtensionProjectData()
        {
            if(!Extensions.Callbacks.ProjectLoaded())
            {
                return null;
            }
            string p = Path.Combine(Extensions.Callbacks.GetProjectDirectoryLocation(),"ExtensionData",__id);
            Directory.CreateDirectory(p);
            return p;
        }
        protected string GetExtensionData()
        {
            
            string p = Path.Combine(Extensions.UserData,"ExtensionData",__id);
            Directory.CreateDirectory(p);
            return p;
        }
        public bool IsProjectLoaded()
        {
            return Extensions.Callbacks.ProjectLoaded();
        }
        public virtual void OnStartRecording()
        {

        }
        public virtual void OnStopRecording()
        {

        }
        protected void StartRecording()
        {
            Extensions.Callbacks.StartRecording();
        }
        protected void StopRecording()
        {
            Extensions.Callbacks.StopRecording();
        }
        protected void EnableOneX()
        {
            Extensions.Callbacks.EnableOneX();
        }
        protected void DisableOneX()
        {
             Extensions.Callbacks.DisableOneX();
        }
        public virtual void OnEnableOneX()
        {

        }
        public virtual void OnDisableOneX()
        {

        }
        public virtual async Task<IActionResult> OnHandleRequest(string path)
        {
            return new NotFoundResult();
        }
    }
}