import{Popup}from"./Popup.js";export class DetailsPopup extends Popup{static#tchmiFQN="TcHmi.Controls.Beckhoff.TcHmiEventGridPopups."+this.name;constructor(element,control){super(element,"detailsPopup",control);let confirmButton=TcHmi.ControlFactory.createEx("TcHmi.Controls.Beckhoff.TcHmiButton",`${this.__parentControl.getId()}.${this.__name}.confirmButton`,{"data-tchmi-width":30,"data-tchmi-height":30,"data-tchmi-tooltip":"%l%Control::TcHmi.Controls.Beckhoff.TcHmiEventGrid::Button_Tooltip_Details_Confirm%/l%"},this.__parentControl),closeButton=TcHmi.ControlFactory.createEx("TcHmi.Controls.Beckhoff.TcHmiButton",`${this.__parentControl.getId()}.${this.__name}.closeButton`,{"data-tchmi-width":60,"data-tchmi-height":30,"data-tchmi-text":"%l%Control::TcHmi.Controls.Beckhoff.TcHmiEventGrid::Button_Text_Details_Close%/l%","data-tchmi-tooltip":"%l%Control::TcHmi.Controls.Beckhoff.TcHmiEventGrid::Button_Tooltip_Details_Close%/l%"},this.__parentControl);if(!confirmButton||!closeButton)throw new Error("Could not create controls for DetailsPopup.");this.__confirmButton=confirmButton;let confirmButtonElement=this.__confirmButton.getElement()[0];confirmButtonElement.classList.add("TcHmi_Controls_Beckhoff_TcHmiEventGrid-template-confirm-button"),confirmButtonElement.classList.add("tchmi-event-grid-template-confirm-button"),this.__elementFooter.appendChild(confirmButtonElement),this.__eventDestroyers.push(TcHmi.EventProvider.register(this.__confirmButton.getId()+".onPressed",()=>{this.__event&&TcHmi.Server.Events.isAlarm(this.__event)&&TcHmi.Server.Events.confirmAlarm(this.__event,data=>{data.error!==TcHmi.Errors.NONE&&TcHmi.Log.Controls.error(this.__parentControl,DetailsPopup.#tchmiFQN,`Unable to confirm alarm with id ${this.__event.id} in domain ${this.__event.domain}: ${TcHmi.Log.buildMessage(data.details)}`)})})),this.__elementFooter.appendChild(closeButton.getElement()[0]),this.__eventDestroyers.push(TcHmi.EventProvider.register(closeButton.getId()+".onPressed",()=>this.hide())),this.__setCanConfirm(this.__parentControl.__getCanConfirm())}__event=null;__confirmButton;__localizedElements=[];__destroyersToCallOnHide=[];show(){super.show(),this.__destroyersToCallOnHide.push(TcHmi.EventProvider.register("onUserDataChanged",_event=>{this.__event&&this.update(this.__event)}))}hide(){super.hide();for(const destroy of this.__destroyersToCallOnHide)destroy();this.__destroyersToCallOnHide=[]}destroy(){super.destroy();for(const element of this.__localizedElements)this.__parentControl.__removeLocalizedElement(element)}update(event){this.__event=event;let fragment=document.createDocumentFragment(),dl=document.createElement("dl");fragment.appendChild(dl);for(const element of this.__localizedElements)this.__parentControl.__removeLocalizedElement(element);let localize=(element,key,parameters)=>{parameters?this.__parentControl.__addLocalizedElement(element,key,...parameters):this.__parentControl.__addLocalizedElement(element,key),this.__localizedElements.push(element)},appendDefinitionItem=(dtContentLocalizationKey,ddContent)=>{let dt=document.createElement("dt");dt.textContent=dtContentLocalizationKey,localize(dt,dtContentLocalizationKey),dl.appendChild(dt);let dd=document.createElement("dd");if(ddContent){let text="object"==typeof ddContent?ddContent.localizationKey:ddContent;this.__parentControl.getIgnoreEscapeSequences()||(text=tchmi_decode_control_characters(text)),dd.textContent=text}else dd.textContent="-";ddContent&&"object"==typeof ddContent&&localize(dd,ddContent.localizationKey,ddContent.formatValues),dl.appendChild(dd)},createObjectDetails=data=>{let dl=document.createElement("dl");for(let key in data)if(data.hasOwnProperty(key)){let dt=document.createElement("dt");dl.appendChild(dt),dt.textContent=key.slice(0,1).toUpperCase()+key.slice(1).replace(/([A-Z]+)/g," $1");let dd=document.createElement("dd");dl.appendChild(dd);let value=data[key];if(null==value||""===value)dd.textContent="-";else if(value instanceof Date)dd.textContent=TcHmi.Localization.formatDate(value);else if("object"==typeof value)dd.appendChild(createObjectDetails(value));else if("string"==typeof value){let parsedJson=null;try{parsedJson=JSON.parse(value)}catch(ex){}if(parsedJson&&"object"==typeof parsedJson)dd.appendChild(createObjectDetails(parsedJson));else{let text=value;this.__parentControl.getIgnoreEscapeSequences()||(text=tchmi_decode_control_characters(text)),dd.textContent=text}}else dd.textContent=value}return dl};appendDefinitionItem("Column_Header_Domain",event.domain),event.type!==TcHmi.Server.Events.Type.Payload&&(appendDefinitionItem("Column_Header_SourceDomain",event.sourceDomain),appendDefinitionItem("Column_Header_Text",event.text)),appendDefinitionItem("Column_Header_Name",event.name);let type="";switch(event.type){case TcHmi.Server.Events.Type.Message:type="Label_Text_Message";break;case TcHmi.Server.Events.Type.Alarm:type="Label_Text_Alarm";break;case TcHmi.Server.Events.Type.Payload:type="Label_Text_Payload"}appendDefinitionItem("Column_Header_Type",{localizationKey:type});const userTimeZone=TcHmi.Server.getCurrentUserConfig().timeZone,timeZoneOffsetMinutes=TcHmi.Server.getCurrentUserConfig().timeZoneOffset/1e3/60,utcOffsetString="UTC "+Math.trunc(timeZoneOffsetMinutes/60).toLocaleString("en-us",{minimumIntegerDigits:2,signDisplay:"always"})+":"+(timeZoneOffsetMinutes%60).toLocaleString("en-us",{minimumIntegerDigits:2,signDisplay:"never"});if(event.type!==TcHmi.Server.Events.Type.Payload){let severity="";switch(event.severity){case TcHmi.Server.Events.Severity.Verbose:severity="Label_Text_Verbose";break;case TcHmi.Server.Events.Severity.Info:severity="Label_Text_Info";break;case TcHmi.Server.Events.Severity.Warning:severity="Label_Text_Warning";break;case TcHmi.Server.Events.Severity.Error:severity="Label_Text_Error";break;case TcHmi.Server.Events.Severity.Critical:severity="Label_Text_Critical"}if(appendDefinitionItem("Column_Header_Severity",{localizationKey:severity}),event.type===TcHmi.Server.Events.Type.Alarm){let alarmState="";switch(event.alarmState){case TcHmi.Server.Events.AlarmState.Raised:alarmState="Label_Text_Raised";break;case TcHmi.Server.Events.AlarmState.Confirmed:alarmState="Label_Text_Confirmed";break;case TcHmi.Server.Events.AlarmState.Cleared:alarmState="Label_Text_Cleared";break;case TcHmi.Server.Events.AlarmState.ClearedAndConfirmed:alarmState="Label_Text_Cleared_And_Confirmed";break;case TcHmi.Server.Events.AlarmState.Invalid:alarmState="Label_Text_Invalid"}event.confirmationState!==TcHmi.Server.Events.ConfirmationState.NotRequired&&event.confirmationState!==TcHmi.Server.Events.ConfirmationState.NotSupported||(alarmState+="_NoConfirmation"),appendDefinitionItem("Column_Header_AlarmState",{localizationKey:alarmState})}appendDefinitionItem("Column_Header_Raised",userTimeZone?{localizationKey:"Date_Format_Timezone",formatValues:[TcHmi.Localization.formatDate(event.timeRaised),utcOffsetString,userTimeZone]}:{localizationKey:"Date_Format_Browser_Timezone",formatValues:[TcHmi.Localization.formatDate(event.timeRaised),utcOffsetString]}),event.type===TcHmi.Server.Events.Type.Alarm?(void 0!==event.timeCleared&&null!==event.timeCleared&&event.timeCleared.valueOf()>0?appendDefinitionItem("Column_Header_Cleared",userTimeZone?{localizationKey:"Date_Format_Timezone",formatValues:[TcHmi.Localization.formatDate(event.timeCleared),utcOffsetString,userTimeZone]}:{localizationKey:"Date_Format_Browser_Timezone",formatValues:[TcHmi.Localization.formatDate(event.timeCleared),utcOffsetString]}):appendDefinitionItem("Column_Header_Cleared",""),void 0!==event.timeConfirmed&&null!==event.timeConfirmed&&event.timeConfirmed.valueOf()>0?appendDefinitionItem("Column_Header_Confirmed",userTimeZone?{localizationKey:"Date_Format_Timezone",formatValues:[TcHmi.Localization.formatDate(event.timeConfirmed),utcOffsetString,userTimeZone]}:{localizationKey:"Date_Format_Browser_Timezone",formatValues:[TcHmi.Localization.formatDate(event.timeConfirmed),utcOffsetString]}):appendDefinitionItem("Column_Header_Confirmed",""),this.__confirmButton.setIsEnabled(event.confirmationState===TcHmi.Server.Events.ConfirmationState.WaitForConfirmation)):this.__confirmButton.setIsEnabled(!1)}else appendDefinitionItem("Column_Header_Received",userTimeZone?{localizationKey:"Date_Format_Timezone",formatValues:[TcHmi.Localization.formatDate(event.timeReceived),utcOffsetString,userTimeZone]}:{localizationKey:"Date_Format_Browser_Timezone",formatValues:[TcHmi.Localization.formatDate(event.timeReceived),utcOffsetString]}),this.__confirmButton.setIsEnabled(!1);if(event.type!==TcHmi.Server.Events.Type.Payload){let dtParams=document.createElement("dt");dtParams.textContent="Column_Header_Parameters",localize(dtParams,"Column_Header_Parameters"),dl.appendChild(dtParams);let ddParams=document.createElement("dd");event.params&&Object.keys(event.params).length>0?ddParams.appendChild(createObjectDetails(event.params)):ddParams.textContent="-",dl.appendChild(ddParams)}else{let dtPayload=document.createElement("dt");dtPayload.textContent="Column_Header_Payload",localize(dtPayload,"Column_Header_Payload"),dl.appendChild(dtPayload);let ddPayload=document.createElement("dd");dl.appendChild(ddPayload),void 0!==event.payload&&null!==event.payload?event.payload instanceof Date?ddPayload.textContent=TcHmi.Localization.formatDate(event.payload):"object"==typeof event.payload?ddPayload.appendChild(createObjectDetails(event.payload)):ddPayload.textContent=event.payload:ddPayload.textContent="-"}this.__elementContent.textContent="",this.__elementContent.appendChild(fragment)}getEvent(){return this.__event}__setCanConfirm(value){TcHmi.Access.setControlRightOverride(this.__confirmButton,"operate",value?null:"Deny")}}