import {DrawingBoardModes} from "../drawing-board.modes";
 import {ServiceInstance} from "../../../shared/models/serviceInstance";
 import {FeatureFlagsService, Features} from "../../../shared/services/featureFlag/feature-flags.service";
+import {ServiceInfoModel} from "../../../shared/server/serviceInfo/serviceInfo.model";
 
 @Injectable()
 export class DrawingBoardHeaderService{
   showAuditInfo(serviceModelId) : void {
     let instance: ServiceInstance = this.store.getState().service.serviceInstance[serviceModelId];
     let model =  new ServiceModel(this.store.getState().service.serviceHierarchy[serviceModelId]);
-    AuditInfoModalComponent.openInstanceAuditInfoModal.next({instanceId : serviceModelId , type : 'SERVICE', model : model , instance : instance});
+    let serviceInfoModel: ServiceInfoModel = this.store.getState().service.serviceInfoModel;
+    console.log("ShowAuditInfo : ServiceInfoModel from drawing-board-header service : ", serviceInfoModel);
+    if(serviceInfoModel != null || serviceInfoModel != undefined){
+      AuditInfoModalComponent.openModal.next(serviceInfoModel);
+    } else{
+      AuditInfoModalComponent.openInstanceAuditInfoModal.next({instanceId : serviceModelId , type : 'SERVICE', model : model , instance : instance});
+    }
   }
 
   toggleResumeService(serviceModelId, isResume: boolean) : void {
 
 import {JobStatus, ServiceAction} from "../shared/models/serviceInstanceActions";
 import {ActivatedRoute} from "@angular/router";
 import {FeatureFlagsService, Features} from "../shared/services/featureFlag/feature-flags.service";
+import {updateServiceInfoModel} from "../shared/storeUtil/utils/service/service.actions";
 
 export interface MenuAction{
   name: string;
       name: "Open",
       dataTestId: "context-menu-open",
       className: "fa-external-link",
-      click: (item: ServiceInfoModel) => this.instantiationStatusComponentService.open(item),
+      click: (item: ServiceInfoModel) => this.openModule(item),
       enabled: (item: ServiceInfoModel) =>  this.isOpenEnabled(item),
       visible: () =>  true,
     },
       name: "New View/Edit",
       dataTestId: "context-menu-new-view-edit",
       className: "fa-pencil",
-      click: (item: ServiceInfoModel) => this.instantiationStatusComponentService.forwardToNewViewEdit(item),
+      click: (item: ServiceInfoModel) => this.newViewEdit(item),
       enabled: () => true,
       visible: () => this.instantiationStatusComponentService.isNewViewEditVisible(),
     },
       name: "Create another one",
       dataTestId: "context-menu-create-another-one",
       className: "fa-clone",
-      click: (item: ServiceInfoModel) => this.instantiationStatusComponentService.recreate(item),
+      click: (item: ServiceInfoModel) => this.recreateItem(item),
       enabled: (item: ServiceInfoModel) =>  this.instantiationStatusComponentService.isRecreateEnabled(item),
       visible: () =>  this.instantiationStatusComponentService.isRecreateVisible(),
     },
     clearInterval(this.timer);
   }
 
+  openModule(item: ServiceInfoModel){
+    this._store.dispatch(updateServiceInfoModel(item));
+    this.instantiationStatusComponentService.open(item);
+  }
+
   refreshData(): void {
     this.dataIsReady = false;
     this._serviceInfoService.getServicesJobInfo(this.lastUpdatedDate === null)
   }
 
   deleteItem(item: ServiceInfoModel): void {
+    this._store.dispatch(updateServiceInfoModel(item));
     this._serviceInfoService.deleteJob(item.jobId).subscribe(() => {
       this.refreshData();
     });
   }
 
   retryItem(item: ServiceInfoModel) : void {
+    this._store.dispatch(updateServiceInfoModel(item));
     if (item.isRetryEnabled) {
       this._instantiationStatusComponentService.retry(item);
     }
   }
 
+  recreateItem(item: ServiceInfoModel){
+    this._store.dispatch(updateServiceInfoModel(item));
+    this.instantiationStatusComponentService.recreate(item)
+  }
+
+  newViewEdit(item: ServiceInfoModel) : void {
+    this._store.dispatch(updateServiceInfoModel(item));
+    this.instantiationStatusComponentService.forwardToNewViewEdit(item)
+  }
+
   resumeItem(item: ServiceInfoModel) : void {
+    this._store.dispatch(updateServiceInfoModel(item));
     if(item.isRetryEnabled && item.jobStatus === JobStatus.COMPLETED_AND_PAUSED){
       this._instantiationStatusComponentService.resume(item);
     }
 
 
 export let initialState: ServiceState = {
   serviceHierarchy: {},
+  serviceInfoModel: {},
   serviceInstance: {},
   lcpRegionsAndTenants: new LcpRegionsAndTenants(),
   subscribers: null,
 
 export interface ServiceState {
   serviceHierarchy: any;
+  serviceInfoModel: any;
   serviceInstance: { [uuid: string]: ServiceInstance; };
   lcpRegionsAndTenants: LcpRegionsAndTenants;
   subscribers: SelectOptionInterface[];
 
   UNDO_DELETE_ACTION_SERVICE_INSTANCE = "UNDO_DELETE_ACTION_SERVICE_INSTANCE",
   CHANGE_SERVICE_IS_DIRTY = "CHANGE_SERVICE_IS_DIRTY",
   UPGRADE_SERVICE_ACTION = "UPGRADE_SERVICE_ACTION",
+  UPDATE_SERVICE_INFO_MODEL = "UPDATE_SERVICE_INFO_MODEL",
   UNDO_UPGRADE_SERVICE_ACTION = "UNDO_UPGRADE_SERVICE_ACTION"
 }
 
   serviceId : string;
 }
 
+export interface UpdateServiceModelInfoAction extends  Action {
+  serviceInfoModel?: any;
+}
+
 export const addServiceAction: ActionCreator<AddServiceAction> = (serviceUuid : string, actionName : ServiceInstanceActions) => ({
   type: ServiceActions.ADD_SERVICE_ACTION,
   serviceUuid: serviceUuid,
   type: ServiceActions.UNDO_UPGRADE_SERVICE_ACTION,
   serviceUuid
 });
+
+export const updateServiceInfoModel : ActionCreator<UpdateServiceModelInfoAction> = (serviceInfoModel : any) => ({
+  type: ServiceActions.UPDATE_SERVICE_INFO_MODEL,
+  serviceInfoModel
+});
 
   UndoUpgradeServiceAction,
   UpdateServiceInstanceAction,
   UpdateServiceModelAction,
-  UpgradeServiceAction
+  UpgradeServiceAction,
+  UpdateServiceModelInfoAction
 } from "./service.actions";
 import {ServiceInstance} from "../../../models/serviceInstance";
 import {ServiceState} from "../main.reducer";
 import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
 import * as _ from "lodash";
+import {ServiceInfoModel} from "../../../server/serviceInfo/serviceInfo.model";
 
 export function serviceReducer(state: ServiceState, action: Action) : ServiceState{
 
         return undoUpgradeServiceInstance(clonedState, uuid);
       }
     }
+
+    case ServiceActions.UPDATE_SERVICE_INFO_MODEL: {
+      const updateServiceInfoModel = <UpdateServiceModelInfoAction>action;
+      let newState = _.cloneDeep(state);
+      const serviceInfoModel : ServiceInfoModel = new ServiceInfoModel();
+      const currentServiceInfoModel = state.serviceInfoModel ? serviceInfoModel : null;
+      newState.serviceInfoModel = Object.assign(serviceInfoModel, updateServiceInfoModel.serviceInfoModel);
+      return newState
+    }
   }
 }