// Angular Core
import { Component, OnInit, Input, OnDestroy } from '@angular/core';

// Third Party
import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
import { Subscription } from 'rxjs';
import { ModalConfig } from 'src/app/interfaces/common-interfaces';
import { ModalInterface } from 'src/app/interfaces/modal-interface';
import { AccountInfoService } from 'src/app/services/accountInfo/account-info.service';
import { DataTransmitterService } from 'src/app/services/dataTransmitter/data-transmitter.service';

@Component({
  standalone: false,
  selector: 'app-vawd-message-pop-up',
  templateUrl: './vawd-message-pop-up.component.html',
  styleUrls: ['./vawd-message-pop-up.component.scss']
})

export class VawdMessagePopUpComponent implements OnInit, ModalInterface, OnDestroy {

  vawdPopUpMessageConfig: ModalConfig = {
     showHeader: true,
     title: 'Message From PRIMERX MARKET'
 };
  @Input() isCartUrl!: boolean;
  @Input() showPreAnnivPopup!: boolean;
  sitename!: string;
  modalComponent!: NgbModalRef;
  sitenameListener!: Subscription;
  @Input() fromManageAcc: boolean = false;

  constructor(public activeModal: NgbActiveModal, public modalService: NgbModal, private accountInfoService: AccountInfoService, private dataTransmitter: DataTransmitterService) {}

  /**
   * Open current modal
   */
  openModal(): void {
    this.modalComponent = this.modalService.open(VawdMessagePopUpComponent, {size: 'sm'});
  }
  /**
   * Close current modal
   */
  closeModal(): void {
    this.modalService.dismissAll();
  }

  /**
   * Sets data required to display the modal if any.
   * @param data
   * @returns void
   */
  setData(data: any): void {
    this.modalComponent.componentInstance.isCartUrl = data.isCartUrl;
    this.modalComponent.componentInstance.showPreAnnivPopup = data.showPreAnnivPopup;
  }

  ngOnDestroy(): void {
    this.sitenameListener.unsubscribe();
  }

  ngOnInit(): void {
    this.sitenameListener = this.dataTransmitter.sitename.subscribe((sitename) => {
      this.sitename = sitename;
      this.vawdPopUpMessageConfig.title = "Message From "+sitename;
    });
    if (!this.fromManageAcc && !this.showPreAnnivPopup) {
      localStorage.setItem('vawdMessageShown', 'shown');
    }
    if (this.showPreAnnivPopup) {
        this.updatePreAnniversaryCnt('updateCount');
        localStorage.setItem('preAnnivPopupShown', 'shown');
    }
  }

  /**
   * Request for reset Esign
   * @param doReset
   * @returns void
   */
  resetEsign(doReset: boolean) {
    this.accountInfoService.resetForEsign(doReset)
      .subscribe({
          next: (res: any) => {
              if (res.data.resetEsign) {
                  location.reload();
              }
          },
          error: (err) => {
              this.accountInfoService.errorCallBack(err);
          },
          complete: () => { },
      });
    this.closeModal();
  };

  /**
   * updating Pre Anniversary count based on action (update/reset to 0)
   * @param string action
   * @returns void
  */
  updatePreAnniversaryCnt(action : string): void {
      this.accountInfoService.updatePreAnniversaryCnt(action)
      .subscribe({
          error: (err) => {
              this.accountInfoService.errorCallBack(err);
          }
      });
  }
}
