/*
All material copyright Esri, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/5.0/esri/copyright.txt for details.
*/
import{__decorate as t}from"tslib";import e from"../../Viewpoint.js";import o from"../../core/Collection.js";import i from"../../core/Error.js";import{EventedAccessor as a}from"../../core/Evented.js";import{property as r,cast as n,subclass as s}from"../../core/accessorSupport/decorators.js";import c from"../../webdoc/support/SlideThumbnail.js";import l from"../../webmap/Bookmark.js";import{GoTo as p}from"../support/GoTo.js";const m=o.ofType(l),u={width:128,height:128,format:"png"},k={takeScreenshot:!0,captureViewpoint:!0,captureRotation:!0,captureScale:!0,captureTimeExtent:!0},w={time:!0};let h=class extends(p(a)){constructor(t){super(t),this.capabilities={...w},this.activeBookmark=null,this.view=null}destroy(){this.view=null,this._set("activeBookmark",null)}castCapabilities(t){return{...w,...t}}get bookmarks(){return this.view?.map?.bookmarks??new m}set bookmarks(t){this._overrideIfSome("bookmarks",t)}set defaultCreateOptions(t){this._set("defaultCreateOptions",{...k,...t})}get defaultCreateOptions(){return k}set defaultEditOptions(t){this._set("defaultEditOptions",{...k,...t})}get defaultEditOptions(){return k}get state(){const{view:t}=this;return t&&!t.ready?"loading":"ready"}async createBookmark(t){const{view:e,defaultCreateOptions:o,capabilities:a}=this;if(!e)throw new i("create-bookmark:invalid-view","Cannot create a bookmark without a view.");const{takeScreenshot:r,screenshotSettings:n,captureViewpoint:s,captureRotation:c,captureScale:p,captureTimeExtent:m}={...o,...t},u=r?await this._createThumbnail(n):void 0,k=a.time&&m&&null!=e.timeExtent?e.timeExtent.clone():void 0;return new l({...u&&{thumbnail:u},...m&&{timeExtent:k},...s&&{viewpoint:this._createViewpoint({view:e,captureScale:p,captureRotation:c})}})}async editBookmark(t,e){if(!t)return t;const{view:o,defaultEditOptions:a}=this;if(!o)throw new i("edit-bookmark:invalid-view","Cannot edit a bookmark without a view.");const{takeScreenshot:r,screenshotSettings:n,captureViewpoint:s,captureRotation:c,captureScale:l,captureTimeExtent:p}={...a,...e},m=r?await this._createThumbnail(n):void 0;return m&&(t.thumbnail=m),s&&(t.viewpoint=this._createViewpoint({view:o,captureScale:l,captureRotation:c})),p&&null!=o.timeExtent&&(t.timeExtent=o.timeExtent.clone()),this.emit("bookmark-edit",{bookmark:t}),t}goTo(t){const{capabilities:e,view:o}=this;if(!o)throw new i("go-to:invalid-view","Cannot go to a bookmark without a view");const a=t?.viewpoint;if(!a)throw new i("go-to:invalid-bookmark","Cannot go to a bookmark that does not contain a 'viewpoint'.",{bookmark:t});this._set("activeBookmark",t);const r=this.callGoTo({target:a}),n=t?.timeExtent;return e.time&&n&&(o.timeExtent=n),this.emit("bookmark-select",{bookmark:t}),r.catch(()=>{}).then(()=>this._set("activeBookmark",null)),r}async _createThumbnail(t){const{view:e}=this;if(!e)throw new i("bookmark:invalid-view","Cannot create slide thumbnail without a view");const o=await e.takeScreenshot({...u,...t});return new c({url:o.dataUrl})}_createViewpoint({view:t,captureRotation:o,captureScale:i}){const a=t.viewpoint?.clone();return new e({targetGeometry:t.extent?.clone(),rotation:(o?a?.rotation:null)??0,scale:(i?a?.scale:null)??0})}};t([r()],h.prototype,"capabilities",void 0),t([n("capabilities")],h.prototype,"castCapabilities",null),t([r({readOnly:!0})],h.prototype,"activeBookmark",void 0),t([r({type:m})],h.prototype,"bookmarks",null),t([r()],h.prototype,"defaultCreateOptions",null),t([r()],h.prototype,"defaultEditOptions",null),t([r({readOnly:!0})],h.prototype,"state",null),t([r()],h.prototype,"view",void 0),h=t([s("esri.widgets.Bookmarks.BookmarksViewModel")],h);const d=h;export{d as default};
