import{eE as e,eA as t,dZ as a,eF as i,dV as s,eC as n,eG as r,eD as o,ef as c,eH as m,eI as d,d_ as l,e0 as h,eJ as u}from"./card-b98d578d.js";import{B as y,i as g}from"./engine-browse-media-e35cac7a.js";import{C as _}from"./engine-86b0096c.js";import{E as p}from"./entity-camera-94c8dadf.js";import{g as f}from"./engine-generic-75ad9390.js";import{e as M}from"./endOfDay-8eba624c.js";import"./live-provider-845afb16.js";class C extends p{getProxyConfig(){return{...super.getProxyConfig(),media:"auto"===this._config.proxy.media||this._config.proxy.media}}_getUIEndpoint(e){return this._config.motioneye?.url?{endpoint:this._config.motioneye.url}:null}async _getRawCapabilities(e){const t=f(this.getConfig());return{...await super._getRawCapabilities(e),clips:!0,snapshots:!0,...t&&{ptz:t}}}}class w{static isMotionEyeEventQueryResults(e){return e.engine===t.MotionEye&&e.type===o.Event}}const D={"%Y":"yyyy","%m":"MM","%d":"dd","%H":"HH","%M":"mm","%S":"ss"},E=new RegExp(/(%Y|%m|%d|%H|%M|%S)/g);class v extends y{constructor(){super(...arguments),this._directoryCache=new e,this._fileCache=new e}getEngineType(){return t.MotionEye}async createCamera(e,t){const a=new C(t,this,{eventCallback:this._eventCallback});return await a.initialize({entityRegistryManager:this._entityRegistryManager,hass:e,stateWatcher:this._stateWatcher})}_convertMotionEyeTimeFormatToDateFNS(e){return e.replace(E,((e,t)=>D[t]))}_motionEyeMetadataGeneratorFile(e,t,s,n){let r=n?._metadata?.startDate??new Date;if(t){const e=s.title.replace(/\.[^/.]+$/,"");if(r=a(e,t,r),!i(r))return null}return{cameraID:e,startDate:r,endDate:r}}_motionEyeMetadataGeneratorDirectory(e,t,n,r){let o=r?._metadata?.startDate??new Date;if(t){const e=a(n.title,t,o);if(!i(e))return null;o=s(e)}return{cameraID:e,startDate:o,endDate:r?._metadata?.endDate??M(o)}}async _getMatchingDirectories(e,t,a,i,s){const n=t.getCamera(a),r=n?.getConfig();if(!(n instanceof p&&r))return null;const o=n.getEntity(),c=o?.config_entry_id,m=o?.device_id;if(!c||!m)return null;const d=(e,t)=>{const s=e.shift();if(!s)return[];const n=s.includes("%")?this._convertMotionEyeTimeFormatToDateFNS(s):null;return[{targets:t,metadataGenerator:(e,t)=>this._motionEyeMetadataGeneratorDirectory(a,n,e,t),matcher:e=>e.can_expand&&(!!n||e.title===s)&&g(e,i?.start,i?.end),advance:t=>d(e,t)}]};return await this._browseMediaWalker.walk(e,[...!1===i?.hasClip||i?.hasSnapshot?[]:d(r.motioneye.movies.directory_pattern.split("/"),[`media-source://motioneye/${c}#${m}#movies`]),...!1===i?.hasSnapshot||i?.hasClip?[]:d(r.motioneye.images.directory_pattern.split("/"),[`media-source://motioneye/${c}#${m}#images`])],{...!1!==s?.useCache&&{cache:this._directoryCache}})}async getEvents(e,a,i,s){if(i.favorite||i.tags?.size||i.what?.size||i.where?.size)return null;const r=new Map,c=async n=>{const c={...i,cameraIDs:new Set([n])},h=s?.useCache??1?this._requestCache.get(c):null;if(h)return void r.set(c,h);const u=a.getCameraConfig(n);if(!u)return;const y=await this._getMatchingDirectories(e,a,n,c,s);if(!y||!y.length)return;const p=this._convertMotionEyeTimeFormatToDateFNS(u.motioneye.movies.file_pattern),f=this._convertMotionEyeTimeFormatToDateFNS(u.motioneye.images.file_pattern),M=c.limit??_,C=await this._browseMediaWalker.walk(e,[{targets:y,metadataGenerator:(e,t)=>e.media_class===m||e.media_class===d?this._motionEyeMetadataGeneratorFile(n,e.media_class===m?f:p,e,t):null,earlyExit:e=>e.length>=M,matcher:e=>!e.can_expand&&g(e,c.start,c.end)}],{...!1!==s?.useCache&&{cache:this._fileCache}}),w=l(C,(e=>e._metadata?.startDate),"desc").slice(0,c.limit??_),D={type:o.Event,engine:t.MotionEye,browseMedia:w};(s?.useCache??1)&&this._requestCache.set(c,{...D,cached:!0},D.expiry),r.set(c,D)};return await n(i.cameraIDs,(e=>c(e))),r.size?r:null}generateMediaFromEvents(e,t,a,i){return w.isMotionEyeEventQueryResults(i)?r(i.browseMedia):null}async getMediaMetadata(e,a,i,s){const r=new Map;if((s?.useCache??1)&&this._requestCache.has(i)){const e=this._requestCache.get(i);if(e)return r.set(i,e),r}const m=new Set,d=async t=>{const i=await this._getMatchingDirectories(e,a,t,null,s);for(const e of i??[])e._metadata?.startDate&&m.add(h(e._metadata.startDate))};await n(i.cameraIDs,(e=>d(e)));const l={type:o.MediaMetadata,engine:t.MotionEye,metadata:{...m.size&&{days:m}},expiry:c(new Date,{seconds:u}),cached:!1};return(s?.useCache??1)&&this._requestCache.set(i,{...l,cached:!0},l.expiry),r.set(i,l),r}getCameraMetadata(e,t){return{...super.getCameraMetadata(e,t),engineIcon:"motioneye"}}}export{v as MotionEyeCameraManagerEngine};