import { Component, OnInit, OnDestroy, Input } from '@angular/core';
import { BannerMessageStatusEn } from '../../common/enums';
import { SessionContext } from '../../common/session-context';

@Component({
  selector: 'app-message-banner',
  templateUrl: './message-banner.component.html',
  styleUrls: ['./message-banner.component.css']
})


export class MessageBannerComponent implements OnInit, OnDestroy {
  static allComponents: Map< MessageBannerComponent, number > = new Map<MessageBannerComponent, number>();
  @Input() zOrder = 0;


  
  bannerMessageStatus = BannerMessageStatusEn;
  

  constructor(public sessionContext: SessionContext) { 
  }

  ngOnInit() {
    MessageBannerComponent.allComponents.set(this, this.zOrder );    
  }

  ngOnDestroy() {
    MessageBannerComponent.allComponents.delete(this);
  }

  getMaxMessageBannerZOrder(): number {
    const iter =  MessageBannerComponent.allComponents.values();
    let maxValue = 0;
    let item = iter.next();
    while ( item != null && !item.done ) {
      if ( item.value > maxValue ) {
        maxValue = item.value;
      }
      item = iter.next();
    }

    return maxValue;
  }

}
